PowerShell承認済み動詞の入門ガイド

PowerShellスクリプティングに関して、一貫した命名規則は堅牢なソリューションを構築する作業を容易にします。良いニュースは、スクリプトやコマンドを書く際に使用できるPowerShellの承認された動詞があるということです。

このチュートリアルでは、PowerShellで使用する承認された動詞を一連の例を通じて学びます。

早速始めて、PowerShellスクリプティングのレベルアップを図りましょう!

前提条件

このチュートリアルは実演を含みます。実演に従いたい場合は、PowerShell 5.1以降が実行されているシステムを確認してください。このチュートリアルではWindows 11とPowerShell 7を使用しています。

PowerShellで承認された動詞のリストを取得する

PowerShellでは、cmdletはPowerShell環境で特定のアクションを実行する小さな単機能のコマンドです。

PowerShellの各cmdletには、動詞と名詞のペア形式に従ったユニークな名前があります。

  • 名前の動詞部分は、cmdletが実行するアクションを説明します。PowerShellでよく使用される一般的な動詞は次のとおりです。
Verb Function
Get Retrieves information.
Set Changes or updates settings.
New Creates something new.
Remove Deletes or removes something.
  • 名前の名詞部分は、アクションが実行されるエンティティまたはオブジェクト、アクションを実行する対象を識別します。名詞は通常、cmdletが対話するオブジェクトのカテゴリやタイプ(コマンド、プロセス、サービス、ファイルなど)を表します。

スクリプトで使用できるすべての承認された動詞を表示するには:

以下のGet-Verbコマンドレットを実行して、PowerShellで承認された動詞の完全なリストを取得します。

Get-Verb

以下の出力は、スクリプトで使用できるいくつかの動詞を表示しています。

Retrieving a complete list of approved verbs

次に、同じコマンドを以下のように実行しますが、今度はワイルドカード検索を使用してreで始まるすべての承認された動詞をリストします。これにより、リセット、リサイズ、やり直しなどの動詞に関連付けられた動詞のリストが絞り込まれます。

Get-Verb re*

以下の例では、動詞のリストを絞り込むことが特定のアクションを考えて動詞を見つける際に役立つことが示されています。

Narrowing down the list of approved verbs

New動詞を使用して新しいリソースを作成する

PowerShellで承認された動詞のリストを取得しましたが、スクリプトやコマンドを実行する際にこれらの動詞をどのように使用するのでしょうか?作成したいリソースの種類を表す名詞の前にNew動詞を付けます(例:ユーザー、ファイル、サービス)。

ただし、この例では、次のように新しいリソース、具体的には新しいユーザーを作成します:

New-LocalUserコマンドを実行して、John Smithという名前の新しいユーザーを作成し、パスワード(Password123)を設定し、アカウントが期限切れにならないようにします(-AccountNeverExpires)。

New-LocalUser -Name "John Smith" -AccountNeverExpires -Password (ConvertTo-SecureString -AsPlainText "Password123" -Force
Creating a new resource (user account) via the New verb

Get 動詞を使用してリソース情報を取得する

PowerShellでは、新しいリソースを作成するだけでなく、既存のリソースに関する情報を取得するための動詞があります。PowerShellでは、オペレーティングシステム、サービス、ファイル、その他のオブジェクトなど、特定のリソースに関する情報を取得またはフェッチするために、一般的に Get 動詞が使用されます。

Get 動詞を使用してリソース情報を取得するには、以下の手順に従ってください。

指定したローカルユーザー(John Smith)に関する情報を取得するために、以下の Get-LocalUser コマンドを実行します。

Get-LocalUser -Name "John Smith"

下の出力では、ユーザーアカウント John Smith有効(アクティブ)であることが表示されます。

Retrieving resource information via the Get verb

Set 動詞を使用して既存のリソースを変更する

リソースの情報を見て何か問題があることに気づいた場合、既存のリソースをどのように変更できますか?心配しないでください!PowerShellに承認された動詞である Set 動詞を使用すると、既存のリソースを変更することができます。

リソースを再作成するのではなく、Set 動詞を使用してプロパティや設定を調整することができます。

Set 動詞を使用して既存のリソースを変更するには、以下の手順に従ってください。

以下のコマンドを実行して、$myVariableの値をHelloに設定し、$myVariableの値をHello, World!に変更します。これらのコマンドは出力を提供しませんが、次のステップで変更内容を確認します。

# 変数リソースを定義する
$myVariable = "Hello"

# 既存の変数リソースの値を変更する
Set-Variable -Name myVariable -Value "Hello, World!"

次に、以下のGet-Variableコマンドを実行して、リソース($myVariable)の情報を取得してください。

Get-Variable -Name myVariable

以下に示すように、出力には変数の名前と値が表示されます。

Retrieving information about a resource

Invoke動詞を使用してアクションをトリガーする

前の例で手動でコマンドを実行する代わりに、PowerShellスクリプトで自動化する方法はありませんか? Invoke動詞を使用すると、アクションを開始したり、コマンドをプログラムで呼び出すことができます。

PowerShellスクリプトとInvoke動詞を使用すると、コンソールにすべて入力することなく、複数のPowerShellコマンドを一度に実行できます。

Invoke動詞を使用したアクションのトリガリング方法を確認するには:

1. 次のInvoke-Expressionコマンドを実行して、現在の日時を取得するGet-Dateコマンドを呼び出してください。

Invoke-Expression -Command "Get-Date"

以下の出力は、Invoke動詞を使用してGet-Dateコマンドが正常に実行されたことを示しています。

Triggering a command via the Invoke verb

2. 次に、お好みのコードエディタを使用してPowerShellスクリプトファイル(例:InvokeVerbDemo.ps1)を作成し、次のコードを記述します。

このコードは、ウェルカムメッセージを表示し(Write-Host)、Get-Serviceコマンドレットを呼び出してシステムのすべてのサービスをリストします。

# ウェルカムメッセージを表示する
Write-Host "Welcome to the Invoke Example!"

# Get-Serviceコマンドレットを呼び出す
Invoke-Command -ScriptBlock { Get-Service }

3. 以下のコマンドを実行して、PowerShellスクリプト(InvokeVerbDemo.ps1)を呼び出します。 $scriptPath変数の値をスクリプトファイルのパスに置き換えてください。

$scriptPath = "C:\PowerShellScripts\InvokeVerbDemo.ps1"
Invoke-Expression -Command $scriptPath

以下の出力は、ウェルカムメッセージとシステムのすべてのサービスのリストが表示され、スクリプトが正常に実行されたことを確認しています。

Invoking a script via the Invoke verb

4. コマンドだけでなく、いつでも呼び出せる再利用可能な関数(Invoke-MyTask)を作成します。基本的に、関数はPowerShellスクリプトの保守性と再利用性を向上させます。

この例では、Invoke-MyTask関数が以下の操作を実行するようにコマンドをカプセル化しています。

  • コンソールに文字列Executing MyTask...を表示(Write-Host)。
  • すべてのプロセスのリストを取得(Get-Process)し、各プロセスのNameCPUのプロパティのみを選択(Select-Object)。
# Invoke動詞を使用してカスタム関数を定義
function Invoke-MyTask {
    # ここにカスタムタスクを記述
    Write-Host "Executing MyTask..."
    Get-Process | Select-Object Name, CPU
}
Defining a PowerShell function

5. 最後に、以下のコマンドを実行して関数を呼び出します(Invoke-MyTask)。

Invoke-Expression -Command Invoke-MyTask

以下に、システム上で実行中のすべてのプロセスの名前とCPU使用率が表示されます。

Invoking a function

Test 動詞を使用してリソースを検証する

頑丈でエラーに強いPowerShellスクリプトを作成する際には、入力値と条件の正確性を確保することが非常に重要です。この目的のために、使用できる強力なツールの1つが Test 動詞です。

Test 動詞を使用すると、与えられた条件が true または false の値を保持しているかどうかを素早く確認し、その結果に基づいて異なるアクションを実行することができます。この例では、Test 動詞を使用してファイルが存在するかどうかを検証します。

以下のコードを実行して、指定された $filePath にあるファイル(C:\MyFolder\example.txt)が存在するかどうかをテスト (Test-Path) し、結果に応じてメッセージを表示します。

# ファイルパスを定義します。
$filePath = "C:\MyFolder\example.txt"

# ファイルが存在するかどうかをテストし、結果に応じてメッセージを表示します。
if (Test-Path $filePath) {
    Write-Host "The file exists at $filePath."
}
else {
    Write-Host "The file does not exist at $filePath."
}
Validating a resource via the Test verb

結論

PowerShell で承認された動詞の基本的な理解と、それらをスクリプトやコマンドで効果的に使用する方法を学びました。これらの動詞を活用することで、さまざまなタスクやシナリオに対して堅牢で効率的かつ一貫性のある PowerShell ソリューションを作成することができます。

このチュートリアルは、熟練したPowerShellユーザーになるための旅の始まりに過ぎません。なぜ他の承認された動詞を学ばないのでしょうか?例えば、データ操作の動詞ExportImportSort)やライフサイクルの動詞StartStop)を学びませんか?今日からPowerShellのスキルをさらに向上させましょう!

Source:
https://adamtheautomator.com/powershell-approved-verbs/