PowerShell とはWhat is PowerShell?

PowerShell は、コマンドライン シェルとスクリプト言語で構成される、クロスプラットフォームのタスク自動化および構成管理フレームワークです。PowerShell is a cross-platform task automation and configuration management framework, consisting of a command-line shell and scripting language. .NET の共通言語ランタイム (CLR) を基に構築されている PowerShell は、テキストを受け取ってテキストを返す多くのシェルとは異なり、.NET オブジェクトを受け取って返します。Unlike most shells, which accept and return text, PowerShell is built on top of the .NET Common Language Runtime (CLR), and accepts and returns .NET objects. この根本的な変更により、自動化のためのまったく新しいツールと方法になっています。This fundamental change brings entirely new tools and methods for automation.

オブジェクト ベースの出力Output is object-based

従来のコマンドライン インターフェイスとは異なり、 PowerShell コマンドレットは、オブジェクトを扱うように設計されています。Unlike traditional command-line interfaces, PowerShell cmdlets are designed to deal with objects. オブジェクトは、画面上に表示される文字による単なる文字列ではない、より詳細な構造化された情報です。An object is structured information that is more than just the string of characters appearing on the screen. コマンドの実行結果は、常に補足的な情報と共に出力され、必要に応じてこの情報を活用できます。Command output always carries extra information that you can use if you need it.

テキスト処理ツールを使用して過去のデータを処理すると、PowerShell で使用された場合とは異なる動作になることがわかるでしょう。If you've used text-processing tools to process data in the past, you'll find that they behave differently when used in PowerShell. ほとんどの場合、テキスト処理ツールを使用して特定の情報を抽出する必要はありません。In most cases, you don't need text-processing tools to extract specific information. 標準の PowerShell オブジェクト構文を使用して、データの一部に直接アクセスします。You directly access portions of the data using standard PowerShell object syntax.

拡張可能なコマンド ファミリThe command family is extensible

cmd.exe などのインターフェイスには、組み込みのコマンド セットを直接拡張する手段がありません。Interfaces such as cmd.exe don't provide a way for you to directly extend the built-in command set. cmd.exe 内で実行される外部のコマンドライン ツールを作成する必要があります。You can create external command-line tools that run in cmd.exe. しかし、これらの外部ツールには、ヘルプの統合などのサービスがありません。But these external tools don't have services, such as Help integration. cmd.exe は、これらの外部ツールが有効なコマンドであることを自動認識しません。cmd.exe doesn't automatically know that these external tools are valid commands.

PowerShell のコマンドは_コマンドレット_と呼ばれています。The commands in PowerShell are known as cmdlets. 各コマンドレットは個別に使用することもできますが、組み合わせて使い複雑なタスクを実行すると、その力を実感できます。You can use each cmdlet separately, but their power is realized when you combine them to perform complex tasks. 多くのシェルと同じように、PowerShell ではコンピューター上のファイル システムにアクセスできます。Like many shells, PowerShell gives you access to the file system on the computer. PowerShell の_プロバイダー_を使うと、レジストリや証明書ストアなどのその他のデータ ストアに、ファイル システムとほぼ同様に簡単にアクセスできるようになります。PowerShell providers enable you to access other data stores, such as the registry and the certificate stores, as easily as you access the file system.

コンパイル済みのコードまたはスクリプトを使用すると、あなた独自のコマンドレットや関数モジュールを作成できます。You can create your own cmdlet and function modules using compiled code or scripts. モジュールは、シェルにコマンドレットとプロバイダーを追加できます。Modules can add cmdlets and providers to the shell. また、PowerShell では、UNIX のシェル スクリプトや cmd.exe のバッチ ファイルに似たスクリプトもサポートしています。PowerShell also supports scripts that are analogous to UNIX shell scripts and cmd.exe batch files.

コマンドのエイリアスをサポートしますSupport for command aliases

PowerShell では、代替名でコマンドを参照するエイリアスをサポートしています。PowerShell supports aliases to refer to commands by alternate names. エイリアスがあることで、他のシェルの経験があるユーザーは、既に知っている一般的なコマンド名を PowerShell のほぼ同じ操作に利用できます。Aliasing allows users with experience in other shells to use common command names that they already know for similar operations in PowerShell.

エイリアスは、新しい名前を別のコマンドに関連付けます。Aliasing associates a new name with another command. たとえば、PowerShell には、出力ウィンドウをクリアする Clear-Host という内部関数があります。For example, PowerShell has an internal function named Clear-Host that clears the output window. コマンド プロンプトに cls または clear エイリアスのどちらかを入力できます。You can type either the cls or clear alias at a command prompt. PowerShell はこれらのエイリアスを解釈して、Clear-Host 関数を実行します。PowerShell interprets these aliases and runs the Clear-Host function.

この機能は、ユーザーが PowerShell を習得するうえで役立ちます。This feature helps users to learn PowerShell. まず、ほとんどの cmd.exe および Unix ユーザーは、既に名前は知っている多数のコマンドのレパートリーを持っています。First, most cmd.exe and Unix users have a large repertoire of commands that users already know by name. 同等の PowerShell のコマンドでは、同一の結果が得られない場合があります。The PowerShell equivalents may not produce identical results. しかし、十分に近い結果になるので、PowerShell のコマンド名を知らなくてもユーザーが既知のコマンドを利用することは可能です。However, the results are close enough that users can do work without knowing the PowerShell command name. 新しいコマンド シェルを習得する上でのもう 1 つの主なストレス要因は、"身体が覚えている" ことです。"Muscle memory" is another major source of frustration when learning a new command shell. 長年にわたって cmd.exe を使用してきた場合、画面をクリアするのに、反射的に cls コマンドを入力してしまうでしょう。If you have used cmd.exe for years, you might reflexively type the cls command to clear the screen. Clear-Host のエイリアスがなければ、エラー メッセージを受け取ってしまい、出力をクリアするにはどうすればいいかわからないでしょう。Without the alias for Clear-Host, you receive an error message and won't know what to do to clear the output.

PowerShell によってコンソールの入力と表示が処理されるPowerShell handles console input and display

コマンドを入力すると、常に、コマンドラインの入力が PowerShell によって直接処理されます。When you type a command, PowerShell always processes the command-line input directly. また、PowerShell では、出力を画面上で確認できるように書式設定します。PowerShell also formats the output that you see on the screen. 各コマンドレットで必要な作業が減るため、これは大きな差になります。This difference is significant because it reduces the work required of each cmdlet. どのコマンドレットでも常に同じように作業できることが、保証されます。It ensures that you can always do things the same way with any cmdlet. コマンドレットの開発者は、コマンドライン引数の解析や出力形式の設定のために、コードを記述する必要はありません。Cmdlet developers don't need to write code to parse the command-line arguments or format the output.

従来のコマンドライン ツールでは、ヘルプの要求と表示に独自の体系が採用されていました。Traditional command-line tools have their own schemes for requesting and displaying Help. 一部のコマンドライン ツールでは、/? を使用してヘルプを表示します。他では、-?/H、または // を使用します。Some command-line tools use /? to trigger the Help display; others use -?, /H, or even //. ヘルプがコンソール画面に表示される代わりに、GUI のウィンドウに表示されるものもあります。Some will display Help in a GUI window, rather than in the console display. 間違ったパラメーターを使用すると、入力内容が無視され、タスクの実行が自動的に開始される場合もあります。If you use the wrong parameter, the tool might ignore what you typed and begin executing a task automatically. PowerShell はコマンドラインを自動的に解析して処理するため、-? パラメーターは常に "このコマンドのヘルプを表示する" ことを意味します。Since PowerShell automatically parses and processes the command line, the -? parameter always means "show me Help for this command".


PowerShell でグラフィック アプリケーションを実行した場合は、そのアプリケーションのウィンドウが開きます。If you run a graphic application in PowerShell, the window for the application opens. PowerShell が介在するのは、ユーザーによって指定されたコマンドライン入力を処理するときと、コンソール ウィンドウに返されたアプリケーション出力を処理するときだけです。PowerShell intervenes only when processing the command-line input you supply or the application output returned to the console window. アプリケーション内部の動作には影響しません。It does not affect how the application works internally.

PowerShell にはパイプラインがあるPowerShell has a pipeline

パイプラインは、コマンドライン インターフェイスで使用される最も重要な概念と言っても過言ではありません。Pipelines are arguably the most valuable concept used in command-line interfaces. パイプラインは、適切に利用すれば、複雑なコマンドを使用する負荷を軽減し、より簡単に作業フローを確認できます。When used properly, pipelines reduce the effort of using complex commands and make it easier to see the flow of work. パイプライン内の各コマンドは、項目ごとに次のコマンドに出力を渡します。Each command in a pipeline passes its output, item by item, to the next command. コマンドでは、一度に複数の項目を処理する必要がなくなります。Commands don't have to handle more than one item at a time. 結果として、リソース使用量が減り、出力をすぐに取得できるようになります。The result is reduced resource consumption and the ability to get output immediately.

パイプラインで使用される表記は、他のシェルで使用される表記とほぼ同じです。The notation used for pipelines is similar to the notation used in other shells. PowerShell でのパイプラインの違いは、一目見ただけではわかりにくいかもしれません。At first glance, it may not be apparent how pipelines are different in PowerShell. 画面にはテキストが表示されますが、PowerShell は、コマンド間ではテキストではなくオブジェクトを受け渡します。Although you see text on the screen, PowerShell pipes objects, not text, between commands.

たとえば、Out-Host コマンドレットを使用して、別のコマンドからの出力をページ単位で表示させると、通常のテキストがページごとに分割されて画面上に表示されているだけのように見えます。For example, if you use the Out-Host cmdlet to force a page-by-page display of output from another command, the output looks just like the normal text displayed on the screen, broken up into pages:

Get-ChildItem | Out-Host -Paging
    Directory: /mnt/c/Git/PS-Docs/PowerShell-Docs/reference/7.0/Microsoft.PowerShell.Core

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          05/22/2020    08:30                About
-----          05/20/2020    14:36           9044 Add-History.md
-----          05/20/2020    14:36          12227 Clear-History.md
-----          05/20/2020    14:36           3566 Clear-Host.md
-----          05/20/2020    14:36          29087 Connect-PSSession.md
-----          05/20/2020    14:36           5705 Debug-Job.md
-----          05/20/2020    14:36           3515 Disable-ExperimentalFeature.md
-----          05/20/2020    14:36          25531 Disable-PSRemoting.md
-----          05/20/2020    14:36           7852 Disable-PSSessionConfiguration.md
-----          05/20/2020    14:36          25355 Disconnect-PSSession.md
-----          05/20/2020    14:36           3491 Enable-ExperimentalFeature.md
-----          05/20/2020    14:36          13310 Enable-PSRemoting.md
-----          05/20/2020    14:36           8401 Enable-PSSessionConfiguration.md
-----          05/20/2020    14:36           9531 Enter-PSHostProcess.md
<SPACE> next page; <CR> next line; Q quit

また、表示する完全なページが準備できると、Out-Host コマンドレットに処理が転送されるため、ページングによって CPU 使用率が低下します。Paging also reduces CPU utilization because processing transfers to the Out-Host cmdlet when it has a complete page ready to display. パイプライン内で先行するコマンドレットは、次のページの出力が利用可能になるまで、実行を一時停止します。The cmdlets that precede it in the pipeline pause execution until the next page of output is available.

パイプライン内のオブジェクトObjects in the pipeline

PowerShell でコマンドレットを実行した場合、コンソール ウィンドウではオブジェクトをテキストで表す必要があるため、テキストが表示されます。When you run a cmdlet in PowerShell, you see text output because it is necessary to represent objects as text in a console window. テキスト出力では、出力されるオブジェクトのすべてのプロパティが必ず表示されるわけではありません。The text output may not display all of the properties of the object being output.

たとえば、Get-Location コマンドレットについて考えてみます。For example, consider the Get-Location cmdlet. テキストの出力は情報の要約であり、Get-Location から返されたオブジェクトの完全な表現ではありません。The text output is a summary of information, not a complete representation of the object returned by Get-Location. 出力の見出しは、画面の表示用にデータを書式設定する処理によって、追加されます。The heading in the output is added by the process that formats the data for onscreen display.


出力を Get-Member コマンドレットにパイプ処理すると、Get-Location から返されたオブジェクトに関する情報が表示されます。Piping the output to the Get-Member cmdlet displays information about the object returned by Get-Location.

Get-Location | Get-Member
   TypeName: System.Management.Automation.PathInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
ToString     Method     string ToString()
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   string Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath Property   string ProviderPath {get;}

Get-Location は、現在のパスとその他の情報を含む PathInfo オブジェクトを返します。Get-Location returns a PathInfo object that contains the current path and other information.

組み込みのヘルプ システムBuilt-in help system

PowerShell には、Unix の man ページと似た PowerShell の概念とコマンド構文を詳細に説明するヘルプ記事があります。Similar to Unix man pages, PowerShell includes detailed help articles that explain PowerShell concepts and command syntax. Get-Help コマンドレットを使用すると、これらの記事をコマンド プロンプトで表示できます。PowerShell ドキュメント オンラインでは、これらの記事の最新版を参照できます。Use the Get-Help cmdlet to display these articles at the command prompt or view the most recently updated versions of these articles in the PowerShell documentation online.

次のステップNext steps

PowerShell の詳細については、このサイトの「PowerShell の習得」のセクションを参照してください。To learn more about PowerShell, see the Learning PowerShell section of this site.