スクリプト作成の概要
PowerShell スクリプト作成は、一連のステートメントを PowerShell 言語で記述し、それらのステートメントをテキスト ファイルに格納するプロセスです。 なぜこれを行うのでしょうか。 PowerShell をしばらく使用すると、ログ レポートの生成やユーザーの管理などの特定のタスクを繰り返していることに気が付きます。 何かを頻繁に繰り返す場合は、自動化することをお勧めします。再利用しやすい方法で格納することをお勧めします。
タスクを自動化するステップには通常、コマンドレット、関数、変数などの呼び出しが含まれます。 これらの手順を格納するには、 .ps1 で終わるファイルを作成して保存します。 その後、実行できるスクリプトが作成されます。
スクリプト作成の学習を始める前に、PowerShell スクリプト言語の機能の概要を見ていきましょう。
変数。 変数を使用して値を格納できます。 コマンドの引数として変数を使用することもできます。
Functions。 関数とは、ステートメントの名前付きリストです。 関数は、コンソールに表示される出力を生成します。 また、他のコマンドの入力として関数を使用することもできます。
注意
PowerShell を使用するタスクの多くは、副作用や、システム状態 (ローカルまたはそれ以外) の変更に関するものです。 多くの場合、この出力はあまり重要ではない問題です (レポート データなど)。
フロー制御。 フロー制御とは、
If、ElseIf、Elseなどのコンストラクトを使用して、さまざまな実行パスを制御する方法です。ループ。 ループとは、アレイに影響を及ぼし、各項目を調査し、各項目にある種の操作を行えるようにするコンストラクトです。 ただし、ループは単なる配列の反復処理に留まるものではありません。
Do-Whileループを使用すれば、条件付きでループを実行し続けることもできます。 詳細については、「作業の概要」を参照してください。エラー処理。 堅牢であり、さまざまな種類のエラーを処理できるスクリプトを作成することが重要です。 終了エラーと非終了エラーの違いを知る必要があります。
TryやCatchなどのコンストラクトを使用します。 このトピックについては、このモジュールの最後の概念ユニットで説明します。式。 PowerShell スクリプトでは、式を頻繁に使用します。 たとえば、カスタム列やカスタムの並べ替え式を作成する場合です。 式は、PowerShell 構文の値の表現です。
.NET および .NET Core 統合。 PowerShell は、.NET および .NET Core と強力に統合できます。 この統合については、このモジュールでは扱いません。
[スクリプトの実行]
一部のスクリプトは安全ではないことに注意する必要があります。 インターネット上でスクリプトを見つけた場合は、そのスクリプトの動作を正確に把握していない限り、お使いのコンピューター上で実行しないほうがよいでしょう。 安全と考えられるスクリプトでも、リスクが生じる可能性があります。 たとえば、テスト環境で物事を仕上げるスクリプトがあるとします。 運用環境でこのスクリプトが有害になることがあります。 スクリプトの動作、スクリプトが自分で作成したものか、同僚が作成したものか、あるいはインターネットから入手したかどうかを把握しておく必要があります。
PowerShell では、次の 2 つの主な方法で意図しない操作を防止しようと試みます。
- 完全パスまたは相対パスを使用してスクリプトを実行するための要件。 スクリプトを実行するときには、常にスクリプトのパスを指定する必要があります。 パスを指定すると、自分が実行している内容を正確に把握できます。 たとえば、実行する予定がなく、スクリプトと同じ名前を持つコマンドとエイリアスがコンピューター上にあるとします。 パスを含めると、実行する必要のあるものを正しく実行できるようにする追加のチェックが得られます。
- 実行ポリシー。 実行ポリシーは、安全機能です。 スクリプトのパスの要求と同様に、意図しない操作をポリシーで防止できます。 ローカル コンピューター、現在のユーザー、特定のセッションなど、さまざまなレベルでポリシーを設定できます。 グループ ポリシー設定を使用して、コンピューターとユーザーの実行ポリシーを設定することもできます。
これら 2 つのメカニズムでは、ファイルを開くことも、そのコンテンツをコピーすることも、テキスト ファイルにコンテンツを配置することも、ファイルを実行することも防止されません。 また、コンソールからのコードの実行が防止されることもありません。 これらのメカニズムが役立つのは、意図しない操作を防止する場合です。 セキュリティ システムではありません。
スクリプトを作成して実行するには、次の操作を行います。
次のような PowerShell ステートメントを作成して、末尾が .ps1 のファイルに保存します。
# PI.ps1 $PI = 3.14 Write-Host "The value of `$PI is $PI"名前とパスでスクリプトを呼び出して、スクリプトを実行します。
注意
スクリプトを実行する前に、現在のシェルが PowerShell であることを確認します。 または、Linux または macOS では、スクリプト ファイルの先頭にシバンを配置して、PowerShell をスクリプト インタープリターとして定義することもできます。
./PI.ps1呼び出しにはファイル拡張子を含めることをお勧めしますが、必須ではありません。
実行ポリシー
次のコマンドレットを使用して、実行ポリシーを管理できます。
Get-ExecutionPolicy。 このコマンドレットでは、現在の実行ポリシーが返されます。 Linux と macOS では、返される値はUnrestrictedです。 これらのオペレーティング システムでは、値を変更することはできません。 この制限のおかげで、Linux や Mac の安全性は損なわれません。 実行ポリシーは安全な機能であり、セキュリティ メカニズムではないことに注意してください。Set-ExecutionPolicy。 Windows コンピューターを使用している場合は、このコマンドレットを使用して、実行ポリシーの値を変更できます。 これは-ExecutionPolicyパラメーターを取ります。 使用できる値はいくつかあります。 値としてはDefaultを使用することをお勧めします。 この値の場合、ポリシーは Windows クライアントではRestrictedに、Windows Server ではRemoteSignedに設定されます。Restrictedは、スクリプトを実行できないことを意味します。 コマンドのみを実行できますが、これはクライアントで意味があります。RemoteSignedは、ローカル コンピューターで記述したスクリプトを実行できることを意味します。 インターネットからダウンロードしたスクリプトは、信頼された発行元のデジタル署名で署名されている必要があります。注意
この他にも使用できる値があります。 詳細については、「実行ポリシーについて」を参照してください。
変数
変数は、スクリプトで使用するだけのものではありません。 また、コンソールで定義することもできます。 後から使用できるように、変数に値を格納できます。 変数を定義するには、その前に $ 文字を付けます。 次に例を示します。
$PI = 3.14
変数の使用: 引用符と補間
Write-Host または Write-Output を介してテキストを出力する場合は、一重引用符または二重引用符を使用できます。 どちらを選択するかは、値を補間するかどうかによります。 次の 3 つのメカニズムについて理解しておく必要があります。
一重引用符。 単一引用符はリテラルを指定します。つまり記述したとおりに表示されます。 次に例を示します。
Write-Host 'Here is $PI' # Prints Here is $PI補間する場合、
$PIの値を解釈および出力するには、二重引用符を使用する必要があります。二重引用符。 二重引用符を使用すると、文字列内の変数が補間されます。
Write-Host "Here is `$PI and its value is $PI" # Prints Here is $PI and its value is 3.14ここでは 2 つのことについて説明します。 バックティック(`)を使うと、
$PIの最初のインスタンスに関する補間を回避できます。 2 番目のインスタンスでは、値は補間されて、書き出されます。$()。 また、二重引用符で囲まれた式を記述することもできます。 そのためには、$()コンストラクトを使用します。 このコンストラクトを使用する方法の 1 つは、オブジェクトのプロパティを補間するというものです。 次に例を示します。Write-Host "An expression $($PI + 1)" # Prints An expression 4.14
Scope
スコープとは、変数、エイリアス、関数などのコンストラクトを読み取って変更できる場所を PowerShell で定義する方法です。 スクリプトの記述について学習する際には、アクセス権を所有している対象、変更できる対象、それを変更できる場所を把握しておく必要があります。 スコープのしくみを理解していないと、コードが予想どおりには動作しないことがあります。
スコープの種類
さまざまなスコープについて説明します。
グローバル スコープ。 このスコープで変数のようなコンストラクトを作成する場合、これらはセッションの終了後も存在し続けます。 新しい PowerShell セッションを開始するときに存在するものは、このスコープ内にあるといえます。
スクリプト スコープ。 スクリプト ファイルを実行すると、スクリプト スコープが作成されます。 たとえば、ファイルで定義されている変数または関数は、スクリプト スコープ内にあります。 ファイルの実行が完了した後は存在しなくなります。 たとえば、スクリプト ファイルで変数を作成し、グローバル スコープをターゲットにすることができます。 ただし、
globalキーワードとともに変数を前に付加して、そのスコープを明示的に定義する必要があります。ローカル スコープ。 ローカル スコープは現在のスコープであり、グローバル スコープや他のスコープにすることができます。
スコープルール
スコープ規則は、特定の時点でどのような値が表示されるかを理解するのに役立ちます。 また、値を変更する方法を理解するのにも役立ちます。
スコープは入れ子にできます。 スコープには親スコープを設定できます。 親スコープとは、現在のスコープ外にある外側のスコープです。 たとえば、ローカル スコープは、グローバル スコープを親スコープに設定できます。 逆に、スコープは入れ子になったスコープ (子スコープとも呼ばれます) を設定することができます。
項目は、現在のスコープと子スコープに表示されます。 変数や関数などの項目は、項目が作成されたスコープ内で表示されます。 既定では、それはどの子スコープでも可視になります。 スコープ内で項目を非公開にして、必要に応じてこの動作を変更することができます。 コンソールで定義されている変数を使用する例を次に示します。
$test = 'hi'次の内容を含む Script.ps1 ファイルがある場合は、スクリプトの実行時に "hi" が出力されます。
Write-Host $test # Prints hi変数
$testがローカル スコープとその子スコープ (この場合はスクリプト スコープ) の両方に表示されていることがわかります。項目は、作成されたスコープ内でのみ変更できます。 既定では、項目が作成されたスコープ内でのみ項目を変更できます。 別のスコープを明示的に指定して、この動作を変更できます。
プロフィール
プロファイルとは、PowerShell の開始時に実行されるスクリプトです。 プロファイルを使用して、背景色やエラーを変更したり、その他の種類のカスタマイズを行ったりするなど、環境をカスタマイズすることができます。 PowerShell は、開始する新しいセッションごとにこれらの変更を適用します。
プロファイルの種類
PowerShell では、複数のプロファイル ファイルがサポートされています。 次に示すように、さまざまなレベルでこれらを適用できます。
| 説明 | パス |
|---|---|
| すべてのユーザー、すべてのホスト | $PSHOME\Profile.ps1 |
| すべてのユーザー、現在のホスト | $PSHOME\Microsoft.PowerShell_profile.ps1 |
| 現在のユーザー、すべてのホスト | $Home[マイ]ドキュメント\PowerShell\Profile.ps1 |
| 現在のユーザー、現在のホスト | $Home[マイ]ドキュメント\PowerShell\Microsoft.PowerShell_profile.ps1 |
ここでは、$PSHOME と $Home の 2 つの変数があります。
$PSHOME は、PowerShell のインストール ディレクトリを指します。
$Home は、現在のユーザーのホーム ディレクトリです。
Visual Studio Code などのその他のプログラムでもプロファイルをサポートしています。
プロファイルを作成する
PowerShell を初めてインストールするとき、プロファイルはありませんが、 $Profile 変数があります。 これは、適用する各プロファイルが配置されるパスを指すオブジェクトです。 プロファイルを作成するには、次の操作を実行します。
プロファイルを作成するレベルを決定します。
$Profile | Select-Object *を実行すると、プロファイルの種類と、それらに関連付けられているパスを確認できます。New-Item -Path $Profile.CurrentUserCurrentHostのようなコマンドを使用して、プロファイルの種類を選択し、その場所にテキスト ファイルを作成します。カスタマイズ内容をテキスト ファイルに追加して保存します。 次回セッションを開始するときに、変更内容が適用されます。