时间:2021-05-22
还记得当年怎样在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 * } -AsCustomObjectPS> $PLA兵种 军区 名称 -- -- -- {海军, 空军, 第二炮兵} {沈阳军区, 北京军区, 济南军区, 南京军区...} 中国人民解放军 PS> $PLA.确认兵种(‘陆军')FalsePS> $PLA | Get-Member TypeName: System.Management.Automation.PSCustomObjectName 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 抗震救灾();声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
对象是使用new创建的,但是并没有与之相对应的delete操作来回收对象占用的内存。当我们完成对某个对象的使用时,只需停止对该对象的引用:将我们的引用改变为指向
在C++中,new表达式用于动态创建对象,即在堆(自由存储区)空间上为对象分配内存,而程序员也要小心的使用这些申请来的内存空间,当不再使用时应该调用delete
在先前的技巧中你能观察到使用了“-ErrorActionStop”结合“异常捕获命令”能捕获一个Powershell命令的错误,可是使用了这种方式操作之后,脚本
一、动态编译简介new创建对象是静态加载类,在编译时刻就需要加载所有可能使用到的类。一百个类,有一个类错了,都无法编译。通过动态加载类可以解决该问题二、代码实例
“new”是C++的一个关键字,同时也是操作符。当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指