提取/查看ScriptMethod的值

时间:2015-04-10 13:07:27

标签: powershell powershell-v3.0

我对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 }

我已经找到了答案,但无济于事。

有人知道吗?

干杯。

2 个答案:

答案 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
相关问题