如何向PowerShell中的内置.net类添加类方法?
我知道我可以像这样向PowerShell中的内置.net类添加实例方法如何向PowerShell中的内置.net类添加类方法?,.net,class,powershell,.net,Class,Powershell,我知道我可以像这样向PowerShell中的内置.net类添加实例方法 PS C:\Users\a> [string] | Add-Member -MemberType ScriptMethod -Name test -Value { >> param( >> $name >> ) >> Write-Host $name >> } >> PS C:\Users\a> [string].test("Joe"
PS C:\Users\a> [string] | Add-Member -MemberType ScriptMethod -Name test -Value {
>> param(
>> $name
>> )
>> Write-Host $name
>> }
>>
PS C:\Users\a> [string].test("Joe")
Joe
PS C:\Users\a>
我想知道是否可以添加一个类方法,我可以像[string]::test(“blah”)
那样调用它
谢谢
编辑: 我之所以要这样做,是因为我已经针对.net 4.5编写了一个PowerShell脚本,并且使用了方法
[string]::isnullorwhitespace
,这是一种.net 4和.net 4.5方法。当我在只安装了.net 3.0的机器上运行时,出现了错误。我不想修改所有使用该方法的地方,相反,如果该方法不存在,我只想添加它。
谢谢。文档上说
“添加成员”cmdlet允许您向Windows PowerShell对象的实例添加成员(属性和方法)
所以我担心这样添加静态成员是不可能的
“添加成员”cmdlet允许您向Windows PowerShell对象的实例添加成员(属性和方法)
因此,我担心这样添加静态成员是不可能的。我认为您不会将成员添加到类中,而只是添加到类的实例中。我将创建您自己的函数,
teststringisnullorwhitespace
,它在.NET 4.0/4.5下运行时使用内置的IsNullOrWhiteSpace
方法,但您自己在.NET早期版本下的实现是:
filter Test-StringIsNullOrWhiteSpace
{
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[string]
# The string to test.
$InputObject
)
if( [string].GetMethods() | Where-Object { $_.Name -eq 'IsNullOrWhiteSpace' } )
{
return [string]::IsNullOrWhitespace( $InputObject )
}
return ($InputObject -eq $null -or $InputObject -match '^\s*$')
}
您应该能够这样使用它:
if( Test-StringIsNullOrWhiteSpace $var )
{
Write-Host ('$var is null or only whitespace.')
}
$emptyVars = $vars | Test-StringIsNullOrWhiteSpace
我认为您不会将成员添加到类中,而只是添加到类的实例中。我将创建您自己的函数,
teststringisnullorwhitespace
,它在.NET 4.0/4.5下运行时使用内置的IsNullOrWhiteSpace
方法,但您自己在.NET早期版本下的实现是:
filter Test-StringIsNullOrWhiteSpace
{
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[string]
# The string to test.
$InputObject
)
if( [string].GetMethods() | Where-Object { $_.Name -eq 'IsNullOrWhiteSpace' } )
{
return [string]::IsNullOrWhitespace( $InputObject )
}
return ($InputObject -eq $null -or $InputObject -match '^\s*$')
}
您应该能够这样使用它:
if( Test-StringIsNullOrWhiteSpace $var )
{
Write-Host ('$var is null or only whitespace.')
}
$emptyVars = $vars | Test-StringIsNullOrWhiteSpace
正确-这是不可能的。您可以使用hack:
newitem函数来命名这样的函数:“[string]::isnullorwhitespace”-value{…}
,但是powershell将永远无法看到它。正确-这是不可能的。您可以使用hack:newitem函数来命名这样的函数:“[string]::isnullorwhitespace”-value{…}
,但powershell永远无法看到它。