PowerShell を知る

PowerShell は、コマンド ライン シェルとスクリプト言語が一体化されたものです。 PowerShell は、Windows 上で管理タスクの自動化をサポートすることから始まりました。 今では、クロス プラットフォームで実行され、さまざまなタスクに使用できるようになりました。

PowerShell が他と違うのは、テキストではなく .NET オブジェクトを受け入れて返すことです。 この機能により、"パイプライン" でさまざまなコマンドを簡単に接続できます。

PowerShell の用途

PowerShell の用途は、Windows 専用だった頃に比べて広がっています。 Windows タスクの自動化にも使用されますが、今日では、次のようなタスクで使用できます。

  • クラウド管理。 PowerShell は、クラウドのリソースを管理するために使用できます。 たとえば、クラウドのリソースに関する情報を取得したり、新しいリソースを更新または配置したりできます。
  • CI/CD。 継続的インテグレーション/継続的配置パイプラインの一部として使用することもできます。
  • Active Directory と Exchange のタスクの自動化。 使用することで、Active Directory のユーザーや、Exchange のメールボックスの作成など、Windows でのほぼすべてのタスクを自動化できます。

用途の範囲は他にも多数ありますが、上記の一覧から PowerShell が長い歴史を経てきたことがわかります。

PowerShell を使用するユーザー

PowerShell は、さまざまなロールで作業するユーザーを支援できる強力なツールです。 従来、PowerShell はシステム管理者ロールで使用されていましたが、現在は DevOps、Cloud Ops、さらには開発者も使用しています。

PowerShell コマンドレット

PowerShell には、何百ものコマンドがプレインストールされています。 PowerShell のコマンドは、cmdlet ("コマンドレット" と読みます) と呼ばれます。

各コマンドレットの名前は、"動詞-名詞" のペアで構成されます。 たとえば、Get-Process のようにします。 この名前付け規則のおかげで、コマンドレットの動作を簡単に理解できます。 また、探しているコマンドを簡単に見つけられます。 使用するコマンドレットを検索するときは、動詞または名詞でフィルターできます。

コマンドレットを使用して PowerShell を探索する

PowerShell を初めて選択したときは、学習することが多く見えるため、難しいと思われるかもしれません。 PowerShell は、必要に応じて少しずつ学習できるように設計されています。

PowerShell には、PowerShell をよく知るのに役立つコマンドレットが含まれています。 これら 3 つのコマンドレットを使用すると、使用可能なコマンド、コマンドの実行内容、操作対象の種類を確認できます。

  • Get-Verb このコマンドを実行すると、ほとんどのコマンドが従う動詞の一覧が返されます。 応答には、これらの動詞によって行われることの説明が含まれます。 ほとんどのコマンドがこの名前付け規則に従うため、コマンドの動作を予想できます。 これは、適切なコマンドを選んだり、自分でコマンドを作成する必要がある場合にコマンドの名前を付けるときに役立ちます。
  • Get-Command このコマンドでは、コンピューターにインストールされているすべてのコマンドの一覧が取得されます。
  • Get-Member オブジェクトベースの出力に対して動作し、コマンドで使用できるオブジェクト、プロパティ、およびメソッドを検出できます。
  • Get-Help コマンドの名前を引数として指定してこのコマンドを呼び出すと、コマンドのさまざまな部分について説明するヘルプ ページが表示されます。

これらのコマンドを使用して、PowerShell について知る必要があるほとんどすべてのことを確認できます。

動詞

"動詞" は、PowerShell の重要な概念です。 これは、ほとんどのコマンドレットが従う名前付け基準です。 また、独自のコマンドを記述するときに従うことが期待されている名前付け基準でもあります。 "動詞" は、実行しようとしている内容 (データの読み取りや、データの変更など) を示しています。 PowerShell には、標準化された動詞の一覧があります。 使用可能なすべての動詞の完全な一覧を取得するには、Get-Verb コマンドレットを使用します。

Get-Verb

このコマンドレットは、動詞の長い一覧を返します。 Description には、その動詞が何を意図しているのかを表すコンテキストが表示されます。 出力の最初の数行を次に示します。

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

Get-Command を使用してコマンドを検索する

Get-Command コマンドレットでは、システムにインストールされている使用可能なすべてのコマンドの一覧が返されます。 返される一覧は非常に大きくなります。 パラメーターやヘルパー コマンドレットを使って応答をフィルター処理することで、返される情報の量を制限できます。

名前でフィルターする

さまざまなパラメーターを使って Get-Command の出力をフィルター処理できます。 フィルター処理を使うと、特定のプロパティを持つコマンドを検索できます。 Name パラメーターでは、特定のコマンドを名前で検索できます。

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

プロセスを操作するコマンドをすべて検索したい場合はどうでしょうか。 ワイルドカード * を使って、他の形式の文字列と一致させることができます。 次に例を示します。

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

名詞と動詞に対するフィルター

動詞と名詞の値でフィルター処理する他のパラメーターもあります。 コマンドの名前の動詞部分は、左端の部分です。 動詞は、Get-Verb コマンドレットによって返される値のいずれかである必要があります。 コマンドの右端の部分が、名詞部分です。 名詞は何でもかまいません。

  • 動詞をフィルターする。 コマンド Get-Process の動詞部分は Get です。 動詞部分でフィルター処理するには、Verb パラメーターを使います。

    Get-Command -Verb 'Get'
    

    この例では、動詞 Get を使用しているすべてのコマンドを一覧表示します。

  • 名詞をフィルターする。 コマンド Get-Process の、名詞部分は Process です。 名詞でフィルター処理するには、Noun パラメーターを使います。 次の例では、文字 U で始まる名詞を持つすべてのコマンドレットを返します。

    Get-Command -Noun U*
    

また、次のように、パラメーターを組み合わせて検索を絞り込むこともできます。

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

ヘルパー コマンドレットを使用して結果をフィルターする

他のコマンドレットを使って結果をフィルター処理することもできます。

  • Select-Object この汎用性の高いコマンドは、1 つ以上のオブジェクトから特定のプロパティを選び出すのに役立ちます。 また、返される項目数を制限することもできます。 次の例では、現在のセッションで使用できる最初の 5 つのコマンドの Name プロパティと Source プロパティの値が返されます。

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    詳しくは、「Select-Object」を参照してください。

  • Where-Object このコマンドレットを使うと、返されるオブジェクトをプロパティの値に基づいてフィルター処理できます。 コマンドには、プロパティの値をテストできる式を指定します。 次の例では、ProcessNamep で始まるすべてのプロセスが返されます。

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    Get-Process コマンドレットでは、プロセス オブジェクトのコレクションが返されます。 その応答をフィルター処理するために、出力を Where-Object に "パイプで渡します"。 パイプは、2 つ以上のコマンドがパイプ文字 | を介して接続されることを意味します。 1 つのコマンドからの出力が、次のコマンドの入力として送られます。 Where-Object のフィルター式では、-like 演算子を使って、文字 p で始まるプロセスを照合しています。

Get-Member を使用してオブジェクトを探索する

目的のコマンドレットを見つけることができたら、何が出力されるかについて、さらに詳しく知りたくなります。 Get-Member コマンドレットにより、オブジェクトの型、プロパティ、メソッドを表示できます。 検査する出力を Get-Member にパイプします。

Get-Process | Get-Member

結果には、TypeName として戻り値の型と、オブジェクトのすべてのプロパティとメソッドが表示されます。 このような結果の抜粋を次に示します。

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

MemberType パラメーターを使うと、返される情報を制限できます。

Get-Process | Get-Member -MemberType Method

既定では、PowerShell にはいくつかのプロパティのみが表示されます。 前の例では、NameMemberTypeDefinition の各メンバーが表示されました。 Select-Object を使って、表示するプロパティを指定できます。 たとえば、Name プロパティと Definition プロパティのみを表示したい場合は、次のようになります。

Get-Process | Get-Member | Select-Object Name, Definition

パラメーターの型で検索する

Get-Member によって、Get-Process から Process 型のオブジェクトが返されることがわかりました。 Get-CommandParameterType パラメーターを使うと、Process オブジェクトを入力として受け取る他のコマンドを検索できます。

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

コマンドの出力の型を確認することは、関連するコマンドの検索を絞り込むのに役立つ場合があります。

その他のリソース