Windows PowerShell スクリプティングとは?

概要

  • PowerShell はコンピュータのタスクを自動化できるスクリプティング言語です。
  • コマンドレットは単一機能の PowerShell コマンドです。「Get-Command」で利用可能なコマンドを表示できます。
  • PowerShell は Windows、macOS、Linux で利用できます。

PowerShell はコンピュータのタスクをシンプルかつ確実に自動化できるスクリプティング言語です。Windows PC 用のスクリプトの作成を開始する方法をご覧ください。

PowerShell スクリプティングの概要

Windows でシンプルな PowerShell スクリプトの作成を開始するには、3 つのことを知っておく必要があります。

  • コマンドレット: 単一機能のコマンドです。
  • パラメータ: コマンドレット/コマンドの何を、いつ、どこで、どのように指定します。
  • パイプライン: コマンドレットとそのパラメータの出力を取得し、他のコマンドレットや関数に接続します。

これら 3 つを組み合わせることで、タスクを自動化するシンプルなスクリプトを作成できます。

ここでは、複数のコマンドレットを組み合わせてタスクを実行する方法を示すパイプラインの例を紹介します。

PowerShell でこのパイプラインを実行するには、次のようなコマンドを使用します。

Get-Object Potato | Peel-Object | Chop-Object Chips| Cook-Object DeepFry `
| Place-Object Bowl

コマンドレットの詳細

他のスクリプティング言語と同様に、PowerShell にはオブジェクトを操作したり、さまざまなタスクを実行したりするためのコマンドが組み込まれています。PowerShell 内のこれらの基本的なコマンドはコマンドレットと呼ばれます。

コマンドレット (コマンドレットと発音) は、.dll 拡張子を使用して PowerShell 環境で使用される、小さく単一機能のコマンドです。コードの軽量な部分であり、コンパイルされた性質のため関数よりも早く実行されます。

PowerShell には数千のコマンドレットがあります。すべてを学ぶ必要はありません。基本的な PowerShell コマンドレットをいくつか学習することから始め、スクリプティングの旅を続けるにつれて学習を続ければよいでしょう。コンピュータにすでにインストールされているコマンドレットを表示するには、次を実行します。

Get-Command

結果をスキャンすると、動詞と名詞の命名規則に従っていることがわかります。これにより、特定のコマンドレットが何をするのかを理解しやすくなります。

たとえば、Get-Command は PowerShell で利用可能なコマンドのリストを返します。Get-Process は現在アクティブなプロセスを取得し、Copy-Item は 1 つ以上のファイルを特定のディレクトリにコピーします。

コマンドレットには、例、使用方法、機能の説明を含む広範なドキュメントも付属しています。

特定のコマンドレットとその使用方法の詳細を確認するには、次を実行します。

Get-Help <name-of-cmdlet>

PowerShell のパラメータの説明

コマンドレットは、動作を変えるためにパラメータを受け入れることができます。コマンドレットまたは関数を呼び出すとき、各 PowerShell コマンドの何を、いつ、どこで、どのように実行するかを指定するためにパラメータ値を指定できます。

たとえば、Get-Process はオペレーティングシステム内のすべてのアクティブなプロセスを取得して一覧表示します。

しかし、特定のプロセスのみを取得したい場合はどうでしょうか? パラメータを使用してそうすることができます。たとえば、すべての Slack プロセスを取得するには、Get-Process コマンドレットで名前パラメータを使用できます。

Get-Process -Name Slack

すると、「slack」という名前のプロセスのみが表示されます。

一部のパラメータは「位置」パラメータであり、これは名前がオプションであることを意味します。この場合、Get-Process -Name SlackGet-Process Slackは同じことを行います。

各コマンドレットは異なるタイプのパラメータを受け入れます。Get-Help コマンドを使用して、SYNTAX セクションでコマンドレットの受け入れ可能なパラメータを表示します。

Get-Help Get-Process

指定されたコマンドレットを実行できるすべて可能な方法のリストが表示されます。

この場合、Get-Process コマンドレットは名前IDコンピュータ名モジュールファイルバージョン情報、およびその他共通のパラメータなどのパラメータを受け入れます。ここでの記号の意味は次のとおりです。

記号

名前

意味

空白

パラメータは入力を受け入れません

-

ハイフン

パラメータ名を表す

<>

山カッコ

テキストのプレースホルダー

[]

角カッコ

1 つ以上の値を受け入れることができるパラメータ

{}

中カッコ

パラメータは値のセットを受け入れる

入力を受け入れるパラメータは、文字列、整数、ブール値、または DateTime など、必要なデータの種類を示します。たとえば、これです。

Get-Process [[-Name] <string[]>]

Name パラメータは 1 つ以上の文字列値を受け入れ、一方これ:

Get-Process -Id <int[]>

Id パラメータは 1 つ以上の整数値を受け入れることを意味します。

以前の Get-Process の例では、結果を絞り込むために Name パラメータを使用しました。しかし、さらに特定のプロセスに絞り込みたい場合は、構文で述べられているように整数が必要な ID パラメータを使用できます。

Get-Process -Id 3016

すると、リストにプロセスが 1 つだけ表示されます。

パイプラインの作成

PowerShell はすべてのデータをオブジェクトとして扱います。スクリプトを作成するには、これらのオブジェクトがパイプ記号 ( | ) で接続された一連のコマンドレットまたは関数を流れます。効果的なスクリプトには、適切なコマンドレットを選択し、パイプラインを使用して論理的な順序で接続することが重要です。

フォルダー内で最もストレージ容量を占める 5 つのファイルを並べ替えて表示するスクリプトを作成しているとします。ファイルの並べ替えスクリプトを作成する方法は他にも強力なものがありますが、次の 1 行は理解しやすいものです。

PowerShell でこれを行うには、次のようなパイプラインを使用します。

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
| Select-Object -First 5 | Format-Table Name, Length -AutoSize

パイプラインを PS1 スクリプトとして保存する

これで動作するパイプラインができました。PS1 スクリプトファイルとして保存して、使用するたびに毎回入力する必要がないようにすることができます。

PS1 ファイルを作成する最も簡単な方法は、スクリプトをメモ帳に貼り付けて、ファイルを .ps1 拡張子で保存することです。

PS1 ファイルを作成したら、PowerShell で./ScriptName.ps1を実行して使用できます。

権限エラーが発生した場合は、スクリプトを実行するときに PowerShell を管理者として実行するのが最も簡単な回避策です。

おめでとうございます。これで PowerShell PS1 スクリプトを作成できるようになりました。

PowerShell は Linux と macOS でも利用可能

PowerShell は、誰でも学ぶことができる最高の初心者向けスクリプティング言語の 1 つです。以前は PowerShell は Windows にのみ限定されていましたが、PowerShell の更新バージョンは現在 macOS と多くの Linux ディストリビューションでも利用できるようになりました。これにより、Windows から他のオペレーティングシステムに知識を移行できるため、PowerShell はさらに魅力的になっています。