提取/查看 ScriptMethod 的值

Extracting / viewing the Value of a ScriptMethod

我是 powershell 的新手,正在深入挖掘,边学边做。

具体来说,我想知道如何查看与重写方法或添加的 ScriptMethod 相关的代码。

cmdlet:Get-Service returns 一个具有 ScriptMethod MemberType 的对象 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 覆盖。

但是我如何从实现 [=31= 的对象中提取 -Value {some_code} ]ScriptMethodMemberType?

我已经搜索了这个问题的答案,但无济于事。

有人知道吗?

干杯。

使用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

您也可以通过隐藏psobject 属性:

$gps.psobject.Methods|?{$_.MemberType-eq'ScriptMethod'}|select -exp Script