我对powershell很新,正在挖掘,随时随地学习。
具体来说,我想知道如何查看与重写方法相关的代码或添加ScriptMethod。
cmdlet: Get-Service 会返回一个对象,该对象具有 ScriptMethod 成员类型,名为 ToString
PS> Get-Service | Get-Member -MemberType ScriptMethod
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
ToString ScriptMethod System.Object ToString();
我知道您可以使用 Add-Member cmdlet覆盖基础.NET ToString(),例如:
$gps = Get-Process s* | Select-Object -First 3 | Add-Member -MemberType ScriptMethod -Name ToString -Value {$this.Name} -PassThru -Force
注意: Get-Process 使用默认的.NET ToString(),但可以使用 Add-Member cmdlet覆盖。
但是如何从实现 ScriptMethod MemberType的对象中提取 -Value { some_code } ?
我已经找到了答案,但无济于事。
有人知道吗?
干杯。
答案 0 :(得分:3)
使用Script
属性或get_Script
方法:
(Get-Service | Select-Object -First 1).ToString | Get-Member -Force
TypeName: System.Management.Automation.PSScriptMethod
Name MemberType Definition
---- ---------- ----------
...
get_Script Method scriptblock get_Script()
...
Script Property scriptblock Script {get;}
...
示例:
(Get-Service | Select-Object -First 1).ToString.Script
结果:
$this.ServiceName
答案 1 :(得分:2)
您还可以通过隐藏的psobject
属性访问它:
$gps.psobject.Methods|?{$_.MemberType-eq'ScriptMethod'}|select -exp Script