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変数、およびDateTime オブジェクトのみを含むことができる$dates変数を作成します。

[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

この例では、 notepad.exeで PowerShell プロファイルを開くことができる 2 つのコマンドを示します。 二重引用符 (") マークの例では、変数の値を使用します。

notepad $PROFILE

notepad "$PROFILE"

次の例では、変数をリテラル テキストとして扱う単一引用符 (') マークを使用します。

'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.

特殊文字を含む変数名

変数名はドル記号 ($) で始まり、英数字と特殊文字を含めることができます。 変数名の長さは、使用可能なメモリによってのみ制限されます。

変数名には英数字とアンダースコア (_) 文字のみが含まれるのがベスト プラクティスです。 スペースやその他の特殊文字を含む変数名は使用が困難であり、避ける必要があります。

英数字変数名には、次の文字を含めることができます。

  • これらのカテゴリの Unicode 文字: LuLlLtLmLo、または Nd
  • アンダースコア (_) 文字。
  • 疑問符 (?) 文字。

次の一覧には、Unicode カテゴリの説明が含まれています。 詳細については、「 UnicodeCategoryを参照してください。

  • Lu - UppercaseLetter
  • Ll - 小文字
  • 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)}

中かっこを含む変数名を参照するには、変数名を中かっこで囲み、バックティック文字を使用して中かっこをエスケープします。 たとえば、 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-ItemまたはGet-ChildItemコマンドレットを使用します。

Get-ChildItem Variable:

特定の変数の値を取得するには、ファイル システム表記を使用して、ドライブの名前と変数の名前を指定します。 たとえば、 $PSCulture 自動変数を取得するには、次のコマンドを使用します。

Get-Item Variable:\PSCulture
Name                           Value
----                           -----
PSCulture                      en-US

Variable: ドライブと PowerShell 変数プロバイダーの詳細を表示するには、次のように入力します。

Get-Help Variable

プロバイダー パスを含む変数構文

プロバイダー パスの前にドル ($) 記号を付け、 IContentCmdletProvider インターフェイスを実装する任意のプロバイダーのコンテンツにアクセスできます。

次の組み込みの PowerShell プロバイダーでは、この表記がサポートされています。

変数コマンドレット

PowerShell には、変数を管理するように設計された一連のコマンドレットが含まれています。

コマンドレットを一覧表示するには、次のように入力します。

Get-Command -Noun Variable

特定のコマンドレットのヘルプを表示するには、次のように入力します。

Get-Help <cmdlet-name>
コマンドレット名 説明
Clear-Variable 変数の値を削除します。
Get-Variable 現在のコンソール内の変数を取得します。
New-Variable 新しい変数を作成します。
Remove-Variable 変数とその値を削除します。
Set-Variable 変数の値を変更します。

関連項目