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」を参照してください。

この例では、 変数の値を取得します。これは、PowerShell コンソールの PowerShell ユーザー プロファイル ファイル $PROFILE へのパスです。

$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 - 大文字Letter
  • Ll - 小文字Letter
  • Lt - TitlecaseLetter
  • Lm - ModifierLetter
  • Lo - OtherLetter
  • Nd -DecimalDigitNumber

スペースや特殊文字を含む変数名を作成または表示するには、変数名を中かっこ ( {} ) で囲みます。 中かっこでは、変数名の文字をリテラルとして解釈します。

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

  • 任意の 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 セッションで変数の値を変更するには、PowerShell プロファイルに次の $VerbosePreference コマンドを追加します。

$VerbosePreference = "Continue"

このコマンドを PowerShell プロファイルに追加するには、 などのテキスト エディターで ファイルを開 $PROFILE notepad.exe。 PowerShell プロファイルの詳細については、「 」を参照about_Profiles。

変数: ドライブ

PowerShell 変数プロバイダーは、ファイル システム ドライブのように見え、動作するドライブを作成しますが、セッション内の変数とその値 Variable: が含まれます。

ドライブに変更するには Variable: 、次のコマンドを使用します。

Set-Location Variable:

ドライブ内の項目と変数を一覧表示 Variable: するには、 または コマンドレット Get-ItemGet-ChildItem 使用します。

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>
コマンドレット名 Description
Clear-Variable 変数の値を削除します。
Get-Variable 現在のコンソール内の変数を取得します。
New-Variable 新しい変数を作成します。
Remove-Variable 変数とその値を削除します。
Set-Variable 変数の値を変更します。

こちらもご覧ください

about_Automatic_Variables

about_Environment_Variables

about_Preference_Variables

about_Profiles

about_Quoting_Rules

about_Scopes

about_Remote_Variables