Lesson 5
変数
目次
- Chapter1 変数
- Chapter2 変数はオブジェクトである
- Chapter3 変数の宣言
- Chapter4 変数のスコープ
- Chapter5 環境変数
- Chapter6 自動変数
- Chapter7 ユーザー設定変数
- Chapter8 代入
- Chapter9 定数と読み取り専用変数
- Chapter10 null
- Chapter11 変数の確認
- Chapter12 変数の破棄
- Chapter13 変数の削除
- Chapter14 文字列とオブジェクトの違い
- Chapter15 メンバー
- Chapter16 オブジェクトの作成
- Chapter17 型変換
- Chapter18 組込み型
- Chapter19 コマンドの実行結果を変数に入れる
Lesson 5
Chapter 1
変数
変数とは、データをメモリに格納するために使われる用語で、プログラム中で何度でも参照や変更ができます。変数には、数値、文字列、オブジェクト、配列など、様々な種類のデータを格納することができます。変数は、コマンドレットの出力や、他の変数の値から計算された値など、様々な方法で設定することができます。
これにより、プログラムの中で、同じ値を何度も記述する必要がなくなり、プログラムの可読性が向上します。
変数を作成するには、変数名を定義して、その後に値を代入します。
例えば、以下のように変数を作成することができます。
powershell
$myVariable = "Hello, World!"
ここでは、$myVariableという変数に、文字列 "Hello, World!"を代入しています。
変数に格納されている値にアクセスするには、変数名を参照します。
例えば、以下のようにして変数に格納された値を表示することができます。
powershell
Write-Output $myVariable
これにより、変数$myVariableに格納されている "Hello, World!" が表示されます。
また、変数に値を再代入することもできます。
例えば、以下のようにして、変数に新しい値を代入することができます。
powershell
$myVariable = "Goodbye, World!"
このようにすると、変数$myVariableの値が "Goodbye, World!"に更新されます。
変数は、他の変数の値を参照して値を計算することもできます。
例えば、以下のようにして、2つの変数の値を足し合わせた値を別の変数に格納することができます。
powershell
$num1 = 10
$num2 = 20
$sum = $num1 + $num2
この場合、変数$sumには、変数$num1と$num2の値を足し合わせた値である30が代入されます。
以上が、PowerShellにおける変数の基本的な使い方です。

Lesson 5
Chapter 2
変数はオブジェクトである
PowerShellにおいて、変数はオブジェクトであるということを認識しておくことは非常に重要です。
PowerShellではオブジェクト指向プログラミングの考え方を取り入れているため、全ての値がオブジェクトとして扱われます。これには、変数も含まれています。
変数がオブジェクトであるため、変数にはメソッドやプロパティを持つことができます。これらのメソッドやプロパティは、変数が格納している値の種類によって異なります。
メソッドは、箱の中の物に対して行う操作(例えば、物を切る、物を結ぶなど)を指します。プロパティは、箱の中の物の特徴(例えば、物の色、物の形など)を指します。
例えば、以下のようにして変数を作成し、その変数に対してGetType()というメソッドを呼び出してみます。
powershell
$myVariable = "Hello, World!"
$myVariable.GetType()
このコマンドを実行すると、変数がSystem.Stringという型であることが表示されます。つまり、PowerShellでは変数がオブジェクトであるため、変数には.GetType()というメソッドを呼び出すことができ、変数が格納している値の型を取得することができます。
また、以下のようにして、変数が格納している値に対して.Lengthというプロパティを呼び出すことができます。
powershell
$myVariable = "Hello, World!"
$myVariable.Length
この場合、変数$myVariableに格納されている文字列の長さが表示されます。つまり、PowerShellでは変数がオブジェクトであるため、変数が格納している値に対してプロパティを呼び出すことができます。
以上のように、PowerShellでは変数が単なる値のコンテナではなく、オブジェクトであるため、変数にはメソッドやプロパティを持つことができます。これにより、より柔軟なプログラミングが可能になります。

Lesson 5
Chapter 3
変数の宣言
PowerShellにおいて、変数を宣言する方法には、明示的に宣言する方法と、暗黙的に宣言する方法があります。
明示的に変数型を宣言する方法
この方法では、変数名の前に$と型情報を付け、=を使って値を代入することで変数を宣言します。
変数には型を指定することができます。
powershell
[string]$myVariable = "Hello, World!"
このように宣言することで、変数$myVariableの型をstringに指定することができます。
暗黙的に変数型を宣言する方法
この方法では、変数名と値を記述するだけで、PowerShellが自動的に変数を宣言します。
powershell
$myVariable = 42
このように宣言することで、変数$myVariableに42という整数を格納することができます。
ただし、暗黙的な宣言では、変数の型が自動的に決定されます。そのため、変数の値によって型が変わる場合があります。例えば、以下のように宣言すると、変数$myVariableの型はstringになります。
powershell
$myVariable = "Hello, World!"
以上のように、PowerShellでは明示的に変数を宣言する方法と、暗黙的に変数を宣言する方法があります。適切な方法を選択し、変数を宣言することが重要です。

Lesson 5
Chapter 4
変数のスコープ
PowerShellにおける変数のスコープには、以下の4つの種類があります。
- グローバルスコープ(Global scope)
- スクリプトスコープ(Script scope)
- 関数スコープ(Function scope)
- ローカルスコープ(Local scope)
それぞれのスコープについて、詳しく説明します。
1.グローバルスコープ
PowerShellを開くと、その中で命令を実行することができます。この状態を「PowerShellセッション」と呼びます。グローバルスコープとは、PowerShellセッションを開始したときに自動的に作られる領域で、どこからでも参照できる変数を定義することができます。グローバルスコープで定義された変数は、PowerShellセッションが終了するまで使うことができます。
グローバルスコープの変数を定義するには、次のようにします。
powershell
$global:myVariable = "Hello, World!"
2.スクリプトスコープ
スクリプトスコープとは、スクリプトファイル内で定義され、ファイル内のどこからでも参照できるスコープです。スクリプトスコープに定義された変数は、スクリプトファイルが実行される間、有効です。
スクリプトスコープの変数を定義するには、次のようにします。
powershell
$script:myVariable = "Hello, World!"
3.関数スコープ
プログラムの中で、同じ処理を何度も書くのは大変です。そこで、同じ処理を何度も使いたいときは、処理をまとめた「関数」というものを使うことができます。関数スコープとは、関数の中で変数を定義することができる領域で、関数内のどこからでもその変数を使うことができます。関数スコープで定義された変数は、関数が実行されている間は使えます。
関数スコープの変数を定義するには、次のようにします。
powershell
function myFunction {
$function:myVariable = "Hello, World!"
}
4.ローカルスコープ
ローカルスコープとは、ある場所(例えば、関数の中やループの中など)で変数を定義することができる領域で、その場所の中のどこからでも変数を使うことができます。ローカルスコープで定義された変数は、そのスコープが終了するまで有効です。
ローカルスコープの変数を定義するには、次のようにします。
powershell
$myVariable = "Hello, World!"
以上がPowerShellにおける変数のスコープの種類です。適切なスコープを選択し、変数を定義することが重要です。

Lesson 5
Chapter 5
環境変数
PowerShellにおいて、環境変数はシステム全体で使用される変数です。環境変数を使用することで、システムやアプリケーションの動作を変更することができます。
PowerShellでは、以下のようにして環境変数を表示することができます。
powershell
Get-ChildItem Env:
これにより、システムで定義されているすべての環境変数のリストが表示されます。
また、環境変数を取得するには、以下のようにして変数に格納することができます。
powershell
$env:変数名
例えば、以下のようにして、システムのホームディレクトリを取得することができます。
powershell
$env:USERPROFILE
環境変数を設定するには、以下のようにして行います。
powershell
$env:変数名 = 値
例えば、以下のようにして、新しい環境変数を設定することができます。
powershell
$env:新しい変数名 = "値"
環境変数を削除するには、以下のようにして行います。
powershell
Remove-Item Env:変数名
以上が、PowerShellにおける環境変数の基本的な使い方です。環境変数を使用することで、システムやアプリケーションの動作を柔軟に設定することができます。 一方で、システムに直接影響を与えるものなので、取り扱いには注意が必要です。

Lesson 5
Chapter 6
自動変数
PowerShellには、スクリプトの実行中に自動的に定義される特別な変数があります。これらは「自動変数」と呼ばれ、スクリプトの実行に役立ちます。
以下に、いくつかの一般的な自動変数を紹介します。
自動変数 | 内容 |
---|---|
$PSVersionTable | 現在のPowerShellバージョンに関する情報を含むハッシュテーブル(キーと値のペアを保持するデータ構造の一種)です。 |
$MyInvocation | 現在実行中のコマンドやスクリプトに関する情報を含むオブジェクトです。 |
$Args | スクリプトに渡された引数を配列として格納します。 |
$Error | 直近のエラーを含むオブジェクトです。 |
$PSScriptRoot | 現在実行中のスクリプトのディレクトリパスを表す文字列です。 |
$PWD | 現在のディレクトリを表すオブジェクトです。 |
これらの変数は、スクリプトの中で自由に使用できます。例えば、$PSVersionTable.PSVersionを使用して、現在のPowerShellバージョン番号を取得することができます。
また、自動変数の値はスクリプト内で変更することはできませんが、新しい値を代入することで再定義することはできます。ただし、自動変数の値を上書きする場合は、その変数が本来持っている機能が壊れる可能性があるため、注意が必要です。
以上が、PowerShellにおける自動変数の基本的な使い方です。自動変数は、スクリプトの実行を補助するために役立つ機能が多数あります。

Lesson 5
Chapter 7
ユーザー設定変数
PowerShellでは、ユーザーが独自の設定変数を作成できます。これらの変数は、PowerShellセッションの間に保持され、コマンドやスクリプトで再利用できます。
ユーザー設定変数を作成するには、$ = という構文を使用します。たとえば、以下のようにして変数$MyVariableを作成し、値"Hello, World!"を割り当てることができます。
powershell
$MyVariable = "Hello, World!"
これにより、変数$MyVariableには"Hello, World!"という値が格納されます。また、変数名にはアルファベット、数字、アンダースコアが使用できますが、数字で始めることはできません。
ユーザー設定変数は、スクリプト内で自由に使用できます。また、既存の変数の値を上書きすることもできます。ただし、システムやPowerShellの動作に影響を与える可能性があるため、注意して使用する必要があります。
ユーザー設定変数の一覧を表示するには、Get-Variableコマンドレットを使用します。以下のようにコマンドを入力すると、現在定義されているすべての変数のリストが表示されます。
powershell
Get-Variable
また、特定の変数の値を表示するには、変数名を指定して$と入力します。例えば、上記の例で作成した$MyVariableの値を表示するには、以下のようにコマンドを入力します。
powershell
$MyVariable
以上が、PowerShellにおけるユーザー設定変数の基本的な使い方です。ユーザー設定変数を活用して、PowerShellの利便性を高めることができます。

Lesson 5
Chapter 8
代入
PowerShellで変数に値を割り当てることを、代入と呼びます。代入には、変数に値を直接割り当てる方法と、コマンドの出力結果を変数に割り当てる方法の2つがあります。
変数に値を直接割り当てる場合は、以下のように変数名に=を使って値を代入します。
powershell
$変数名 = 値
例えば、次のように$nameという変数に"John"という文字列を代入することができます。
powershell
$name = "John"
変数に割り当てる値は、文字列、数値、真偽値、配列、ハッシュテーブルなど、さまざまなデータ型があります。 また、コマンドの出力結果を変数に代入する場合は、以下のようにコマンドの後ろに「|」を使ってOut-Stringコマンドレットを実行し、変数名に代入します。
powershell
$変数名 = コマンド | Out-String
例えば、Get-Processコマンドを使用して現在実行中のプロセスの一覧を取得し、それを$processesという変数に代入する場合は、以下のように入力します。
powershell
$processes = Get-Process | Out-String
これにより、$processes変数には、Get-Processコマンドの出力結果が文字列として格納されます。
以上が、PowerShellにおける代入の基本的な使い方です。代入を利用することで、変数に値を割り当て、それを使用することができます。

Lesson 5
Chapter 9
定数と読み取り専用変数
PowerShellには、値を変更できない定数と、スクリプト内でのみ値を変更できる読み取り専用変数の2つがあります。
定数は、スクリプトで使用される値を変更できないようにするために使用されます。定数にはNew-Variableコマンドレットを使用して定義し、-Option Constantパラメーターを指定します。
powershell
New-Variable -Name 定数名 -Value 値 -Option Constant
例えば、以下のコードは、定数PIを定義しています。
powershell
New-Variable -Name PI -Value 3.14 -Option Constant
このように定数を定義すると、後でスクリプト内で同じ名前の変数を定義しても、定数値が変更されることはありません。
読み取り専用変数は、スクリプト内で値を変更できない変数です。これは、スクリプトの安全性を高めるために使用されます。読み取り専用変数には$ReadOnly属性を使用して、変数の定義時に設定します。
powershell
$変数名 = 値
$変数名.Attributes = "ReadOnly"
例えば、以下のコードは、読み取り専用変数$myvarを定義しています。
powershell
$myvar = "Hello, World!"
$myvar.Attributes = "ReadOnly"
このように読み取り専用変数を定義すると、スクリプトの実行中にその値を変更することができなくなります。ただし、スクリプトが終了すると、読み取り専用変数の値を変更することは可能です。

Lesson 5
Chapter 10
null
PowerShellにおいて、nullは、変数に値がないことを示す特別な値です。nullは、変数が宣言されているが、初期化されていない場合、または変数に$nullという値が明示的に代入された場合に生成されます。
null値は、プログラム内で値が存在しないことを明示的に表現する必要がある場合に役立ちます。また、$nullを返す関数やコマンドレットがあるため、変数の値が$nullであることをテストする必要がある場合があります。
以下は、変数$null_varにnull値を代入する例です。
powershell
$null_var = $null
また、以下の例では、Get-Processコマンドレットが存在しないプロセスを指定して実行された場合に、$nullが返されます。
powershell
$notepad = Get-Process -Name Notepad2 -ErrorAction SilentlyContinue
if ($notepad -eq $null) {
Write-Host "Notepad is not running"
}
上記の例では、Get-Processコマンドレットが-Nameパラメーターで指定された名前のプロセスを見つけることができない場合、コマンドレットは$nullを返します。そのため、$notepad変数が$nullであるかどうかを確認しています。変数が$nullである場合は、Notepadが実行されていないことを示すメッセージが表示されます。

Lesson 5
Chapter 11
変数の確認
PowerShellでは、現在設定されている変数の値を確認するために、Get-Variableコマンドレットを使用できます。
以下の例では、$myVariableという変数に値が設定されているかどうかを確認しています。
powershell
Get-Variable -Name myVariable
また、Get-Variableコマンドレットに-Scopeパラメータを追加することで、指定されたスコープ内で定義された変数だけを確認することができます。たとえば、次の例では、グローバルスコープ内で定義された$myVariable変数の値を確認しています。
powershell
Get-Variable -Name myVariable -Scope Global
Get-Variableコマンドレットを使用すると、変数の名前、値、および変数のスコープが表示 されます。また、-ValueOnlyパラメーターを使用することで、変数の値だけを表示することもできます。
powershell
Get-Variable -Name myVariable -ValueOnly
このコマンドを実行すると、$myVariable変数の値が表示されます。このように、Get-Variableコマンドレットを使用することで、PowerShellスクリプトのデバッグや、実行中に変数の値を確認することができます。

Lesson 5
Chapter 12
変数の破棄
PowerShellには、「変数の破棄」と「変数の削除」の2つの用語がありますが、本質的には同じ意味を持ちます。変数を破棄または削除すると、メモリ内のその変数の割り当てられた領域が解放されます。
ただし、Remove-Variableコマンドレットを使用して変数を削除する場合、変数が削除される前にその内容を表示することができます。これにより、削除する変数の値が本当に削除するものであるかどうかを確認できます。
一方、変数の破棄については、PowerShellに特別なコマンドはありません。破棄したい変数を単に再定義するか、スクリプトを終了することによって、変数を破棄することができます。ただし、変数を破棄する場合は、その変数が使用されている可能性があるため、その変数を再定義する前に、スクリプトの他の部分で変数が使用されていないことを確認する必要があります。
つまり、変数の破棄は、変数を再定義するか、スクリプトを終了することで行われますが、変数の削除は、Remove-Variableコマンドレットを使用して行われ、変数の値を表示してから削除することができます。

Lesson 5
Chapter 13
変数の削除
PowerShellでは、Remove-Variableコマンドレットを使用して、変数を破棄することができます。
以下の例では、変数$myVariableを削除しています。
powershell
Remove-Variable -Name myVariable
このコマンドを実行すると、$myVariable変数が削除されます。
また、Remove-Variableコマンドレットに-Scopeパラメータを追加することで、指定されたスコープ内で定義された変数だけを破棄することができます。たとえば、次の例では、グローバルスコープ内で定義された$myVariable変数を削除しています。
powershell
Remove-Variable -Name myVariable -Scope Global
このコマンドを実行すると、グローバルスコープ内で定義された$myVariable変数が削除されます。
Remove-Variableコマンドレットを使用すると、PowerShellスクリプト内で不要な変数を削除し、リソースを節約することができます。ただし、変数を削除する前に、その変数がスクリプトの他の部分で使用されていないことを確認する必要があります。
変数を削除する前に、その変数がスクリプトの他の部分で使用されていないことを確認する必要があります。また、削除した変数は元に戻すことができないため、必要な場合はバックアップを取っておくことをお勧めします。

Lesson 5
Chapter 14
文字列とオブジェクトの違い
PowerShellにおいて、文字列とオブジェクトは異なる概念です。
文字列は、単なる文字列の集まりであり、文字列操作を行うために使用されます。例えば、ファイルパスやユーザー入力の値などが、文字列として扱われます。
一方、オブジェクトは、プロパティやメソッドを持つデータ構造であり、PowerShellでの主要な概念です。PowerShellには、様々な種類のオブジェクトがあります。例えば、ファイルシステム、レジストリ、プロセス、サービス、ユーザーアカウント、ネットワークコンポーネントなどが、オブジェクトとして扱われます。
PowerShellでは、様々なコマンドレットや関数を使用して、オブジェクトを操作できます。これらのコマンドレットや関数を使用することで、オブジェクトのプロパティやメソッドにアクセスし、必要な情報を取得したり、変更したりできます。
つまり、文字列はデータの単なる文字列であり、オブジェクトはそのデータを扱うための構造体のようなものであると言えます。

Lesson 5
Chapter 15
メンバー
PowerShellで扱うオブジェクトには、情報を表すデータ(プロパティ)や、処理を行うための機能(メソッド)があります。これらは、オブジェクトのメンバーと呼ばれます。
プロパティは、オブジェクトに関する情報を表す変数のようなものです。例えば、ファイルオブジェクトには、ファイル名、作成日時、更新日時、ファイルサイズなどのプロパティがあります。これらのプロパティには、getアクセサとsetアクセサがあり、getアクセサを使用するとプロパティの値を読み取り、setアクセサを使用するとプロパティの値を変更することができます。
メソッドは、オブジェクトに対して実行できる操作であり、関数のようなものです。例えば、ファイルオブジェクトには、ファイルを開く、読み取る、書き込む、クローズするなどのメソッドがあります。これらのメソッドを呼び出すことで、ファイルオブジェクトに対して実際の操作を行うことができます。
PowerShellでは、Get-Memberというコマンドレットを使用して、オブジェクトが持つプロパティやメソッドの一覧を取得することができます。Get-Memberコマンドレットを使用することで、オブジェクトの詳細を調べることができ、必要なプロパティやメソッドにアクセスするための情報を得ることができます。

Lesson 5
Chapter 16
オブジェクトの作成
PowerShellでは、コマンドレットを使用してオブジェクトを作成できます。また、New-Objectコマンドレットを使用して、カスタムオブジェクトを作成することもできます。
例えば、New-Objectコマンドレットを使用して、空の配列オブジェクトを作成するには、次のように入力します。
powershell
$array = New-Object System.Collections.ArrayList
上記の例では、New-Objectコマンドレットを使用して、System.Collections.ArrayListクラスの新しいインスタンスを作成し、$array変数に代入しています。このように、New-Objectコマンドレットを使用することで、PowerShellでオブジェクトを作成し、それらを操作することができます。

Lesson 5
Chapter 17
型変換
PowerShellでは、変数の型を変換することができます。これを型変換と呼びます。
たとえば、整数値を文字列に変換するには、ToString()メソッドを使用します。
powershell
$int = 123
$string = $int.ToString()
また、文字列を整数値に変換するには、[int]キャスト演算子を使用します。
powershell
$string = "123"
$int = [int]$string
他にも、型変換には様々な方法があります。たとえば、[double]、[bool]、[datetime]などの型キャスト演算子があります。また、Parseメソッドを使用することもできます。例えば、[int]::Parse("123")というコードを使用して、文字列を整数値に変換することができます。
型変換を使用することで、PowerShellスクリプトで必要なデータ型に変換することができます。

Lesson 5
Chapter 18
組込み型
PowerShellには、組み込み(すでに設定済みの)のデータ型がいくつかあります。これらのデータ型は、PowerShellで使用するすべてのデータを表現するために使用されます。以下に、PowerShellの組み込みデータ型について説明します。
文字列型 (String)
文字列型は、テキストデータを表すために使用されます。ダブルクォートまたはシングルクォートで囲んだ文字列を作成することができます。文字列は、文字列の連結、検索、比較などの操作ができます。
整数型 (Integer)
整数型は、整数を表すために使用されます。正の整数、負の整数、0などを表現できます。PowerShellは、32ビットおよび64ビットの整数型をサポートしています。
浮動小数点型 (Double)
浮動小数点型は、小数点以下を含む数値を表すために使用されます。32ビットまたは64ビットの精度で使用できます。
日付型 (DateTime)
日付型は、日付と時刻を表すために使用されます。日付、時刻、および時間間隔の計算を行うことができます。
論理型 (Boolean)
論理型は、true/falseの値を表すために使用されます。条件式の評価や制御フローの制御に使用されます。
配列型 (Array)
配列型は、複数の値をまとめて格納するために使用されます。配列内の値には、同じ型である必要があります。
ハッシュテーブル型 (Hashtable)
ハッシュテーブル型は、キーと値のペアを格納するために使用されます。キーは一意である必要があります。ハッシュテーブルを使用することで、データの高速な検索が可能になります。
オブジェクト型 (Object) オブジェクト型は、.NET
Frameworkの全ての型を表現するために使用されます。.NET Frameworkのクラス、構造体、列挙型、およびインターフェースなどを表現できます。

Lesson 5
Chapter 19
コマンドの実行結果を変数に入れる
PowerShellでは、コマンドの実行結果を変数に代入することができます。これは、後で結果を再利用する必要がある場合や、複数のコマンドの結果を一時的に保存する場合に役立ちます。
変数にコマンドの実行結果を代入するには、以下のようなコマンドレットを使用します。
powershell
$変数名 = コマンドレット
例えば、現在のディレクトリのファイル一覧を取得する「Get-ChildItem」コマンドを実行して、結果を「$files」という変数に代入するには、以下のようにコマンドを入力します。
powershell
$files = Get-ChildItem
これで、ファイル一覧が「$files」という変数に格納されます。この変数には、配列としてファイル一覧が格納されているため、例えば最初のファイル名を表示するには、以下のようにコマンドを入力します。
powershell
$files[0].Name
このように、コマンドの実行結果を変数に代入することで、後で再利用したり、加工したりすることができます。

目次
- Chapter1 変数
- Chapter2 変数はオブジェクトである
- Chapter3 変数の宣言
- Chapter4 変数のスコープ
- Chapter5 環境変数
- Chapter6 自動変数
- Chapter7 ユーザー設定変数
- Chapter8 代入
- Chapter9 定数と読み取り専用変数
- Chapter10 null
- Chapter11 変数の確認
- Chapter12 変数の破棄
- Chapter13 変数の削除
- Chapter14 文字列とオブジェクトの違い
- Chapter15 メンバー
- Chapter16 オブジェクトの作成
- Chapter17 型変換
- Chapter18 組込み型
- Chapter19 コマンドの実行結果を変数に入れる