欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell小技巧之使用New-Module命令动态创建对象

程序员文章站 2022-04-19 11:01:40
还记得当年怎样在powershell中动态创建对象吧?今天要分享的方法不敢自诩高大上,但也足以让new-object感到汗颜。 背景 在system center op...

还记得当年怎样在powershell中动态创建对象吧?今天要分享的方法不敢自诩高大上,但也足以让new-object感到汗颜。

背景
在system center operation manager中有个management pack,叫做:“microsoft.systemcenter.operationsmanager.summarydashboard”。在该mp中有个discovery叫做:“collect agent configurations”。该工作流中用到了一段脚本,其中使用了new-module命令。

new-module就是在内存中动态生成一个module组件。用它来自定义对象有点大材小用了。

演习

$pla = new-module {
 $名称 = ‘中国人民解放军'
 $军区 = @('沈阳军区','北京军区','济南军区','南京军区','广州军区','成都军区','兰州军区')
 $兵种 = @('海军','空军','第二炮兵')
 
 function 保卫党
 {
  return $true
 }
 
 function 保卫人民
 {
 return $null
 }
 
 function 抗洪抢险
 {
 return $true
 }
 
 function 抗震救灾
 {
 return $true
 }
 
 function 确认兵种
 {
 param($某兵种)
 if ($this.兵种.contains($某兵种)){
  return $true
  }
 return $false
 }
 export-modulemember -variable * -function *
 
} -ascustomobject


ps> $pla

兵种                      军区                     名称                     
--                      --                     --                     
{海军, 空军, 第二炮兵}                {沈阳军区, 北京军区, 济南军区, 南京军区...}         中国人民解放军                  

ps> $pla.确认兵种(‘陆军')
false
ps> $pla | get-member


  typename: system.management.automation.pscustomobject

name    membertype  definition            
----    ----------  ----------            
equals   method    bool equals(system.object obj)  
gethashcode method    int gethashcode()         
gettype   method    type gettype()          
tostring  method    string tostring()         
兵种     noteproperty system.object[] 兵种=system.object[]
军区     noteproperty system.object[] 军区=system.object[]
名称     noteproperty system.string 名称=中国人民解放军     
保卫人民    scriptmethod system.object 保卫人民();       
保卫党     scriptmethod system.object 保卫党();       
抗洪抢险    scriptmethod system.object 抗洪抢险();       
抗震救灾    scriptmethod system.object 抗震救灾();