PowerShell: 変数の使い方まとめ

PowerShellでの変数の宣言・初期化、宣言の強制、データ型の確認・指定・変換、 自動変数(シェル変数)など、変数の使い方についてまとめて紹介しています。

変数の宣言・初期化

PowerShellで変数を宣言・初期化する方法は 「New-Variable」コマンドレットを使用する方法と、 使用しない方法があります。 使用しない方がシンプルに記述できます。

PowerShellではデータ型の指定は必要ありません。 PowerShell側で自動的に判断してくれます。

New-Variableで変数を宣言・初期化する方法

次のコードでは変数「a」を宣言、値を1で初期化しています。 注意点としては、「New-Variable」コマンドレットの後の変数名の部分には 「$」記号が付きません。宣言した後に変数を使用する場合は「$」記号が必要です。

New-Variable a -Value 1

$a = 2

Write-Host $a  # 2

New-Variableを使わない方法

上のコードは次のように書くこともできます。

$a = 1

$a = 2

Write-Host $a  # 2

最初の「$a = 1」の部分が宣言と初期化を兼ねています。

PowerShellでは変数の大文字と小文字を区別しないため、 「$a」も「$A」も同じ変数とみなされます。

(詳細記事:変数を宣言・初期化する方法

変数の宣言を強制する

変数の宣言を強制するには先頭に次のコードを記述します。

# 変数の宣言を強制する
Set-PSDebug -Strict

宣言の強制を解除する場合は次のように「-off」を指定します。

# 変数宣言の強制を解除
Set-PSDebug -Off

(詳細記事:変数の宣言を強制する

データ型一覧

PowerShellで使うデータ型、データ型のエイリアス(別名)です。
まずは使用頻度の高い太字表記のデータ型 (Boolean, String, DateTime, Int32, Double) をエイリアスと共におさえてください。

データ型エイリアス
System.Booleanbool
System.Bytebyte
System.SBytesbyte
System.Charchar
System.Stringstring
System.DateTimedatetime
System.Int16int16
System.Int32int, int32
System.Int64long, int64
System.UInt16uint16
System.UInt32uint32
System.UInt64uint64
System.Singlesingle, float
System.Doubledouble
System.Decimaldecimal

(詳細記事:PowerShellで使うデータ型一覧

変数のデータ型を確認・指定する

データ型を確認する方法

データ型を確認する場合はGetTypeメソッドを使用し、 「変数.GetType()」と記述します。

$a = 2147483647
Write-Host $a.GetType()  # System.Int32

$b = 2147483648
Write-Host $b.GetType()  # System.Int64

$c = 3.14
Write-Host $c.GetType()  # System.Double

$d = "hello"
Write-Host $d.GetType()  # System.String

$e = $true
Write-Host $e.GetType()  # System.Boolean

補足として「$null(NULL値)」が格納されている変数に対して GetTypeメソッドを使用するとエラーが発生します。

データ型を明示的に指定する方法

データ型を明示的に指定する場合は変数名の前に データ型を角括弧で囲って記述します。

書式
[データ型]$変数名 = 値

変数にInt32、Int64、Double、String、Boolean型を指定しています。

[Int32]$a = 10

[Int64]$b = 10

[Double]$c = 3.14

[String]$d = "hello"

[Boolean]$e = $true

(詳細記事: 変数のデータ型を確認・指定する方法

データ型を変換

PowerShellでデータ型を変換する場合は[]角括弧を使って 「[変換したいデータ型」変換対象」と記述します。
例えば文字列型に変換する場合は次のように記述します。

[string]変換対象

文字列を数値型に変換

$s = "10"
$s.GetType().Name  # String

# 数値型に変換
$n = [int]$s
$n.GetType().Name  # Int32

数値型を文字列型に変換

$n = 10
$n.GetType().Name  # Int32

# 文字列型に変換
$s = [string]$n
$s.gettype().Name  # String

文字列をDateTime型(日付型)に変換

$s = "2020/1/1"
$s                 # 2020/1/1
$s.GetType().Name  # String

# DateTime型に変換
$d = [datetime]$s
$d                 # 2020年1月1日 0:00:00
$d.GetType().Name  # DateTime

DateTime型を文字列型に変換

$d = Get-Date
$d                 # 2022年3月5日 11:19:34
$d.GetType().Name  # DateTime

# 文字列型に変換
$s = [string]$d
$s                 # 03/05/2022 11:19:34
$s.GetType().Name  # String

(詳細記事: データ型変換 文字列⇔数値、日付⇔文字列など

Boolean型(true/false)の記述方法

PowerShellでBoolean型の値を使用したい場合、 「True」や「False」と入力してもエラーが発生します。 正しくは「$true」「$false」と先頭に「$」記号を付ける必要があります。

$bln = $true

Write-Host $bln
Write-Host $bln.getType()

# 実行結果
True
System.Boolean

$記号を付けずに「true」と記述した場合はエラーが発生します。 「$true」や「$false」は自動変数(シェル変数)の1つです。

(詳細記事:Boolean型(true/false)の記述方法

自動変数(シェル変数)

自動変数とはPowerShellによって作成・管理される変数のことで、 ホームディレクトリのパスやエラー情報、引数情報などの 状態が格納されています。

代表的な自動変数

最も使用頻度が高いのは「$true」と「$false」です。 他にはNULL値も「NULL」ではなく「$null」と記述します。

自動変数概要
$true真偽値の真(True)
$false真偽値の偽(False)
$nullNUll値
$Args関数やスクリプトに指定したパラメータの値
$Errorエラー情報
$HOMEユーザーのホームディレクトリのパス
$PSHOMEPowerShellがインストールされているディレクトリのパス
$this自分自身を示すオブジェクト

(詳細記事:自動変数(シェル変数)とは

PowerShell