1. ホーム
  2. powershell

[解決済み] PowerShellで、変数が数値を保持しているかどうかをテストするにはどうすればよいですか?

2022-02-10 10:24:58

質問

PowerShellで、変数が数値を保持しているかどうかをテストするにはどうすればよいですか?

現在、このようにしようとしているのですが、いつも次のような結果が返ってくるようです。 false .

add-type -Language CSharpVersion3 @'
    public class Helpers {
        public static bool IsNumeric(object o) {
            return o is byte  || o is short  || o is int  || o is long
                || o is sbyte || o is ushort || o is uint || o is ulong
                || o is float || o is double || o is decimal
                ;
        }
    }
'@

filter isNumeric($InputObject) {
    [Helpers]::IsNumeric($InputObject)
}

PS> 1 | isNumeric
False

解決方法は?

フィルターを以下のように変更してください。

filter isNumeric {
    [Helpers]::IsNumeric($_)
}

function$input 変数にパイプライン情報を格納するのに対し filter は、特殊な変数 $_ には、現在のパイプライン・オブジェクトが含まれています。

編集する

powershell 構文では、filter (w/o add-type) を使用することができます。

filter isNumeric() {
    return $_ -is [byte]  -or $_ -is [int16]  -or $_ -is [int32]  -or $_ -is [int64]  `
       -or $_ -is [sbyte] -or $_ -is [uint16] -or $_ -is [uint32] -or $_ -is [uint64] `
       -or $_ -is [float] -or $_ -is [double] -or $_ -is [decimal]
}