簡體   English   中英

如何在PowerShell中將類方法添加到內置.net類中?

[英]How to add a class method to a built-in .net class in 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")
Joe
PS C:\Users\a>

我想知道是否可以添加一個我可以調用它的類方法,例如[string]::test("blah")

謝謝。


編輯:

我想要這樣做的原因是因為我針對.net 4.5編寫了PowerShell腳本,並且使用了[string]::isnullorwhitespace ,這是.net 4和.net 4.5方法。 當我在僅安裝.net 3.0的計算機上運行時,出現錯誤。 我不想修改使用該方法的所有位置,相反,我只想添加該方法(如果不存在)。 謝謝。

文件說

使用Add-Member cmdlet,可以將成員(屬性和方法)添加到Windows PowerShell對象的實例

因此,我擔心不可能以這種方式添加靜態成員。

我認為您不是將成員添加到類中,而只是添加到類的實例中。 我將創建自己的函數Test-StringIsNullOrWhiteSpace ,該函數在.NET 4.0 / 4.5下運行時使用內置的IsNullOrWhiteSpace方法,但在.NET Test-StringIsNullOrWhiteSpace版本下使用您自己的實現:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM