about_Variables
簡単な説明
PowerShell で使用できる値を変数に格納する方法について説明します。
長い説明
PowerShell 変数には、すべての種類の値を格納できます。 たとえば、コマンドの結果を格納し、コマンドと式で使用される要素 (名前、パス、設定、値など) を格納します。
変数は、値が格納されるメモリの単位です。 PowerShell では、変数は、ドル記号 () で始まるテキスト文字列 ($
、 など$a
$process
$my_var
) で表されます。
変数名では大文字と小文字は区別されず、スペースや特殊文字を含めることができます。 ただし、特殊文字やスペースを含む変数名は使用が困難であり、避ける必要があります。 詳細については、「 特殊文字を含む変数名」を参照してください。
PowerShell には、いくつかの異なる種類の変数があります。
ユーザー作成変数: ユーザーが作成した変数は、ユーザーによって作成および管理されます。 既定では、PowerShell コマンド ラインで作成する変数は、PowerShell ウィンドウが開いている間のみ存在します。 PowerShell ウィンドウを閉じると、変数が削除されます。 変数を保存するには、それを PowerShell プロファイルに追加します。 グローバル、スクリプト、またはローカル スコープを使用してスクリプト内に変数を作成することもできます。
自動変数: 自動変数は PowerShell の状態を格納します。 これらの変数は PowerShell によって作成され、PowerShell は精度を維持するために必要に応じて値を変更します。 ユーザーはこれらの変数の値を変更できません。 たとえば、 変数には
$PSHOME
PowerShell インストール ディレクトリへのパスが格納されます。自動変数の詳細、一覧、および説明については、「 about_Automatic_Variables」を参照してください。
ユーザー設定変数: ユーザー設定変数には、PowerShell のユーザー設定が格納されます。 これらの変数は PowerShell によって作成され、既定値が設定されます。 ユーザーは、これらの変数の値を変更できます。 たとえば、 変数は
$MaximumHistoryCount
セッション履歴内のエントリの最大数を決定します。基本設定変数の詳細、一覧、説明については、「 about_Preference_Variables」を参照してください。
変数の使用
新しい変数を作成するには、代入ステートメントを使用して変数に値を割り当てます。 変数を使用する前に宣言する必要はありません。 すべての変数の既定値は です $null
。
PowerShell セッション内のすべての変数の一覧を取得するには、「 」と入力します Get-Variable
。 変数名は、変数の参照に使用される前のドル記号 ($
) なしで表示されます。
例:
$MyVariable = 1, 2, 3
$Path = "C:\Windows\System32"
変数は、コマンドの結果を格納するのに役立ちます。
例:
$Processes = Get-Process
$Today = (Get-Date).DateTime
変数の値を表示するには、変数名を入力し、その前にドル記号 ($
) を付けます。
例:
$MyVariable
1
2
3
$Today
Tuesday, September 3, 2019 09:46:46
変数の値を変更するには、変数に新しい値を割り当てます。
次の例では、変数の値を $MyVariable
表示し、変数の値を変更してから、新しい値を表示します。
$MyVariable = 1, 2, 3
$MyVariable
1
2
3
$MyVariable = "The green cat."
$MyVariable
The green cat.
変数の値を削除するには、 コマンドレットを Clear-Variable
使用するか、値を に $null
変更します。
Clear-Variable -Name MyVariable
$MyVariable = $null
変数を削除するには、 Remove-Variable または Remove-Item を使用します。
Remove-Variable -Name MyVariable
Remove-Item -Path Variable:\MyVariable
また、1 つのステートメントで複数の変数に値を割り当てることもできます。 次の例では、同じ値を複数の変数に割り当てます。
$a = $b = $c = 0
次の例では、複数の変数に複数の値を割り当てます。
$i,$j,$k = 10, "red", $true # $i is 10, $j is "red", $k is True
$i,$j = 10, "red", $true # $i is 10, $j is [object[]], Length 2
詳細については、about_Assignment_Operatorsの「複数の変数の割り当て」セクションを参照してください。
変数の種類
整数、文字列、配列、ハッシュ テーブルなど、任意の種類のオブジェクトを変数に格納できます。 また、プロセス、サービス、イベント ログ、およびコンピューターを表すオブジェクト。
PowerShell 変数は緩やかに型指定されます。つまり、特定の種類のオブジェクトに限定されません。 1 つの変数に、異なる種類のオブジェクトのコレクション (配列) を同時に含めることもできます。
変数のデータ型は、変数の値の .NET 型によって決まります。 変数のオブジェクト型を表示するには、 Get-Member を使用します。
例:
$a = 12 # System.Int32
$a = "Word" # System.String
$a = 12, "Word" # array of System.Int32, System.String
$a = Get-ChildItem C:\Windows # FileInfo and DirectoryInfo types
型属性とキャスト表記を使用すると、変数に特定のオブジェクト型またはその型に変換できるオブジェクトのみを含めることができます。 別の型の値を割り当てようとすると、PowerShell はその値をその型に変換しようとします。 型を変換できない場合、代入ステートメントは失敗します。
キャスト表記を使用するには、変数名の前に角かっこで囲まれた型名を入力します (代入ステートメントの左側)。 次の例では、 $number
整数のみを含むことができる変数、 $words
文字列のみを含めることができる変数、および $dates
DateTime オブジェクトのみを含むことができる変数を作成します。
[int]$number = 8
$number = "12345" # The string is converted to an integer.
$number = "Hello"
Cannot convert value "Hello" to type "System.Int32". Error: "Input string
was not in a correct format."
At line:1 char:1
+ $number = "Hello"
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [],
ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[string]$words = "Hello"
$words = 2 # The integer is converted to a string.
$words += 10 # The plus (+) sign concatenates the strings.
$words
210
[datetime] $dates = "09/12/91" # The string is converted to a DateTime object.
$dates
Thursday, September 12, 1991 00:00:00
$dates = 10 # The integer is converted to a DateTime object.
$dates
Monday, January 1, 0001 00:00:00
コマンドと式での変数の使用
コマンドまたは式で変数を使用するには、変数名を入力し、その前にドル記号 ($
) を付けます。
変数名とドル記号が引用符で囲まれていない場合、または二重引用符 ("
) で囲まれている場合は、変数の値がコマンドまたは式で使用されます。
変数名とドル記号が単一引用符 ('
) で囲まれている場合、変数名が式で使用されます。
PowerShell での引用符の使用の詳細については、「 about_Quoting_Rules」を参照してください。
この例では、変数の値を $PROFILE
取得します。これは、PowerShell コンソールの PowerShell ユーザー プロファイル ファイルへのパスです。
$PROFILE
C:\Users\User01\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
この例では、 で PowerShell プロファイルを開くことができる 2 つのコマンド notepad.exe示します。 二重引用符 ("
) マークの例では、変数の値が使用されます。
notepad $PROFILE
notepad "$PROFILE"
次の例では、変数をリテラル テキストとして扱う単一引用符 ('
) を使用します。
'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.
特殊文字を含む変数名
変数名はドル記号 ($
) で始まり、英数字と特殊文字を含めることができます。 変数名の長さは、使用可能なメモリによってのみ制限されます。
ベスト プラクティスは、変数名には英数字とアンダースコア (_
) 文字のみが含まれることです。 スペースやその他の特殊文字を含む変数名は、使用が困難であり、避ける必要があります。
英数字の変数名には、次の文字を含めることができます。
- 次のカテゴリの Unicode 文字: Lu、 Ll、 Lt、 Lm、 Lo、 または Nd。
- アンダースコア (
_
) 文字。 - 疑問符 (
?
) 文字。
次の一覧には、Unicode カテゴリの説明が含まれています。 詳細については、「 UnicodeCategory」を参照してください。
- Lu - UppercaseLetter
- Ll - 小文字Letter
- Lt - TitlecaseLetter
- Lm - ModifierLetter
- Lo - OtherLetter
- Nd - DecimalDigitNumber
スペースまたは特殊文字を含む変数名を作成または表示するには、変数名を中かっこ ({}
) で囲みます。
中かっこは、変数名の文字をリテラルとして解釈するように PowerShell に指示します。
特殊文字変数名には、次の文字を含めることができます。
- 次の例外を除く任意の Unicode 文字。
- 右中かっこ (
}
) 文字 (U+007D)。 - バックティック () 文字 (
`
U+0060)。 バックティックは Unicode 文字をエスケープするために使用され、リテラルとして扱われます。
- 右中かっこ (
PowerShell には、英数字と$_
特殊文字を含む 、$?
、$^
、 などの$$
予約変数があります。 詳細については、「about_Automatic_Variables」を参照してください。
たとえば、次のコマンドは という名前 save-items
の変数を作成します。 変数名にはハイフン ({}
) 特殊文字が含まれているため、中かっこ (-
) が必要です。
${save-items} = "a", "b", "c"
${save-items}
a
b
c
次のコマンドは、環境変数によって表されるディレクトリ内の子項目を ProgramFiles(x86)
取得します。
Get-ChildItem ${env:ProgramFiles(x86)}
中かっこを含む変数名を参照するには、変数名を中かっこで囲み、バックティック文字を使用して中かっこをエスケープします。 たとえば、type という名前 this{value}is
の変数を作成するには、次のようにします。
${this`{value`}is} = "This variable name uses braces and backticks."
${this`{value`}is}
This variable name uses braces and backticks.
変数とスコープ
既定では、変数は作成されたスコープでのみ使用できます。
たとえば、関数で作成した変数は、関数内でのみ使用できます。 スクリプトで作成した変数は、スクリプト内でのみ使用できます。 スクリプトをドット ソースにすると、変数が現在のスコープに追加されます。 詳細については、「 about_Scopes」を参照してください。
スコープ修飾子を使用して、変数の既定のスコープを変更できます。 次の式は、 という名前の変数を作成します Computers
。 変数は、スクリプトまたは関数で作成された場合でも、グローバル スコープを持ちます。
$Global:Computers = "Server01"
セッション外で実行されるスクリプトまたはコマンドの場合は、呼び出し元のセッション スコープから変数値を埋め込むためのスコープ修飾子が必要 Using
です。そのため、セッション外のコードからそれらにアクセスできます。
詳細については、「 about_Remote_Variables」を参照してください。
変数の保存
作成した変数は、作成したセッションでのみ使用できます。 セッションを閉じると失われます。
開始するすべての PowerShell セッションで変数を作成するには、変数を PowerShell プロファイルに追加します。
たとえば、すべての PowerShell セッションで変数の値を $VerbosePreference
変更するには、PowerShell プロファイルに次のコマンドを追加します。
$VerbosePreference = "Continue"
このコマンドを PowerShell プロファイルに追加するには、notepad.exeなどのテキスト エディターでファイルを開$PROFILE
きます。 PowerShell プロファイルの詳細については、「 about_Profiles」を参照してください。
変数: ドライブ
PowerShell 変数プロバイダーは、 Variable:
ファイル システム ドライブのように見え、動作するドライブを作成しますが、セッション内の変数とその値が含まれています。
ドライブに Variable:
変更するには、次のコマンドを使用します。
Set-Location Variable:
ドライブ内の項目と変数をVariable:
一覧表示するには、 または Get-ChildItem
コマンドレットをGet-Item
使用します。
Get-ChildItem Variable:
特定の変数の値を取得するには、ファイル システム表記を使用して、ドライブの名前と変数の名前を指定します。 たとえば、自動変数を $PSCulture
取得するには、次のコマンドを使用します。
Get-Item Variable:\PSCulture
Name Value
---- -----
PSCulture en-US
ドライブと PowerShell 変数プロバイダーの詳細を Variable:
表示するには、次のように入力します。
Get-Help Variable
プロバイダー パスを含む変数構文
プロバイダー パスの前にドル ($
) 記号を付け、 IContentCmdletProvider インターフェイスを実装する任意のプロバイダーのコンテンツにアクセスできます。
次の組み込みの PowerShell プロバイダーでは、この表記がサポートされています。
変数コマンドレット
PowerShell には、変数を管理するように設計されたコマンドレットのセットが含まれています。
コマンドレットを一覧表示するには、次のように入力します。
Get-Command -Noun Variable
特定のコマンドレットのヘルプを表示するには、次のように入力します。
Get-Help <cmdlet-name>
コマンドレット名 | 説明 |
---|---|
Clear-Variable |
変数の値を削除します。 |
Get-Variable |
現在のコンソール内の変数を取得します。 |
New-Variable |
新しい変数を作成します。 |
Remove-Variable |
変数とその値を削除します。 |
Set-Variable |
変数の値を変更します。 |