2

このように、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 しかインストールされていないマシンで を実行すると、エラーが発生しました。そのメソッドを使用したすべての場所を変更するのではなく、そのメソッドが存在しない場合は追加したいだけです。ありがとう。

4

2 に答える 2

4

ドキュメンテーションによると

Add-Member コマンドレットを使用すると、Windows PowerShell オブジェクトのインスタンスにメンバー (プロパティとメソッド) を追加できます。

そのため、静的メンバーをそのように追加することはできないのではないかと心配しています。

于 2013-08-01T13:01:53.063 に答える
0

メンバーをクラスに追加するのではなく、クラスのインスタンスにのみ追加すると思います。.NET 4.0/4.5 で実行する場合Test-StringIsNullOrWhiteSpaceは組み込みメソッドを使用しますが、以前のバージョンの .NET では独自の実装を使用する独自の関数 を作成します。IsNullOrWhiteSpace

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
于 2013-08-01T18:26:19.800 に答える