Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向PowerShell中的内置.net类添加类方法?_.net_Class_Powershell - Fatal编程技术网

如何向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"

我知道我可以像这样向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")
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永远无法看到它。