PowerShell: [string]〇〇と[string]::〇〇の違い

PowerShellのスクリプト内で [string]〇〇や[string]::〇〇といった表記を見かけることがあります。 一見似ていますが、意味が全く違うので PowerShellに慣れていない最初の頃は注意が必要です。

結論から言うと[string]〇〇はデータ型の指定や変換で、 [string]::〇〇はスタティックメンバの呼び出しです。

意味の違い
表記意味
[string]〇〇データ型の指定・変換
[string]::〇〇スタティックメンバの呼び出し

具体例として[string]を上げていますが、 角括弧[]の中にはstringだけでなく、 intやdatetimeなどの型エイリアス名か型名が入ります。

型エイリアスの一例
型エイリアス名型名
stringSystem.String
intSystem.Int32
datetimeSystem.DateTime

[string]〇〇の意味

この表記はデータ型の指定・変換という意味です。 明示的にデータの型を指定・変更したい場合に使います。
〇〇の部分にはデータ(リテラルや変数)を記述します。

具体例は次の通りです。


[string]$s = "100"  # string型を指定

$n = 10
[string]$10   # 数値をstring型に変換

[int]"100"    # 文字列をint型に変換

この表記は「データ型の指定」よりも、 「データ型の変換」で使用するケースが多いと思います。

[string]::〇〇の意味

この表記はクラスのメソッドかプロパティを呼び出します。
〇〇の部分にはスタティックメンバ (スタティックメソッドかスタティックプロパティ)が入ります。 スタティックは「静的な」という意味です。 ::はスタティックメンバを呼び出すための演算子です。

# StringクラスのFormatメソッドを実行
[string]::Format() # 

# DateTimeクラスのNowプロパティを参照
[datetime]::Now    # 現在の日時

スタティックメンバを呼び出すことで、 インスタンスを作成することなく クラスのメソッドやプロパティを使用できます。

PowerShell