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
このコマンドレットを使うと、返されるオブジェクトをプロパティの値に基づいてフィルター処理できます。 コマンドには、プロパティの値をテストできる式を指定します。 次の例では、ProcessName
がp
で始まるすべてのプロセスが返されます。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 にはいくつかのプロパティのみが表示されます。 前の例では、Name
、MemberType
、Definition
の各メンバーが表示されました。 Select-Object
を使って、表示するプロパティを指定できます。 たとえば、Name
プロパティと Definition
プロパティのみを表示したい場合は、次のようになります。
Get-Process | Get-Member | Select-Object Name, Definition
パラメーターの型で検索する
Get-Member
によって、Get-Process
から Process 型のオブジェクトが返されることがわかりました。 Get-Command
の ParameterType パラメーターを使うと、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…
コマンドの出力の型を確認することは、関連するコマンドの検索を絞り込むのに役立つ場合があります。
その他のリソース
PowerShell