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.Boolean | bool |
System.Byte | byte |
System.SByte | sbyte |
System.Char | char |
System.String | string |
System.DateTime | datetime |
System.Int16 | int16 |
System.Int32 | int, int32 |
System.Int64 | long, int64 |
System.UInt16 | uint16 |
System.UInt32 | uint32 |
System.UInt64 | uint64 |
System.Single | single, float |
System.Double | double |
System.Decimal | decimal |
(詳細記事: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) |
$null | NUll値 |
$Args | 関数やスクリプトに指定したパラメータの値 |
$Error | エラー情報 |
$HOME | ユーザーのホームディレクトリのパス |
$PSHOME | PowerShellがインストールされているディレクトリのパス |
$this | 自分自身を示すオブジェクト |
(詳細記事:自動変数(シェル変数)とは)