マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】PowerShell

【OSS情報アーカイブ】PowerShell

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

「PowerShell」とは

「PowerShell」基本情報

■概要

PowerShell(パワーシェル)とは、Microsoft社が開発したシェル(スクリプト言語)です。拡張可能で高機能な運用管理機能を提供します。

■基本説明

PowerShellは、タスク自動化および構成管理フレームワークであり、コマンドラインシェルとそれに関連するスクリプト言語で構成されています。

システム管理者やパワーユーザー向けに設計されており、システム管理でよく使われる処理を実行したり、スクリプト化して自動実行を行えます。「.NET Framework」を基盤として動作します。

■経緯

・2003年:初期版発表
・2006年:初版リリース
・2016年:オープンソース化

■Windows環境用「Windows PowerShell」とオープンソース版「PowerShell」

Windows環境用「Windows PowerShell」

Windows環境では、コマンドプロンプトの進化版「Windows PowerShell」として、Windowsを管理するための新しいシェルとして開発されました。

コマンドプロンプトに関連するさまざまな問題を解決し、新しい機能を追加することによって、コマンドラインとスクリプト環境を改善するように設計されています。

Windows7以降には標準で搭載されており、Windowsサーバ群のデフォルトシェルになっています。

オープンソース化された「PowerShell」

Microsoftは、Windows用であった「Windows PowerShell」をオープンソース化したことにより、「Linux」や「macOS」でも動作するようになりました。

■Windows用コマンドラインシェルの変遷

①コマンドプロンプト(cmd.exe)

コマンドプロンプトは、MS-DOSやWindowsに搭載されていたコマンドラインツールです。

限定的な機能しか利用できないため、管理機能自動化に対応しきれない問題がありました。

②Windows Script Host (WSH)

Microsoftは、1998年、コマンドプロンプトの短所を補うものとして「Windows Script Host(WSH)」を提供しました。

「シェルに統合されていない」「ドキュメント不足」「セキュリティ上の欠陥」「システム上の脆弱性になりうる」などの問題があり、広く普及することはありませんでした。

③Windows PowerShell

Microsoftは、2003年、「Windowsや自社製品のシステム管理/自動化を行うための新世代シェル」および「スクリプトとして実行可能なプログラミング言語」として「Monad」(後のPowerShell)を発表しました。

■オフィシャルサイト情報

オフィシャルサイト

→Microsoft →PowerShell(PowerShell Documentation | Microsoft Docs)

ライセンス情報

PowerShellのライセンスは「MIT License」です。

詳細について、こちらを参照ください。
→GitHub →PowerShell/LICENSE.txt

ダウンロード

→GitHub →PowerShell/PowerShell

■同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「Bash」など。

「PowerShell」の主な特徴

■対話型環境

PowerShellは、コマンドラインツールとCOMオブジェクトへのアクセスを提供する、インタラクティブでスクリプト化された対話型環境を提供します。

対話形式の入力コマンドからスクリプト作成やコマンド実行を行えます。

■コマンドレット

PowerShellでは、管理タスクは「コマンドレット」によって実行されます。

大量のコマンドレットが用意されており、各種設定など管理業務に必要な操作のほとんどすべてをカバーします。

.NETクラス

コマンドレットは特定の操作を実装する特殊な.NETクラスで、PowerShellランタイムは実行時にコマンドレットをインスタンス化して呼び出します。

これらのコマンドレットクラスは、任意の.NET APIを参照することができ、任意の.NET言語で実装することで、独自コマンドレットを開発してPowerShellに追加できます。

使用方法

コマンドレットは、使用方法/出力形式などが統一化されているため容易に習熟できます。

構文は「動詞→名詞→パラメータ名→パラメータ値」のように規定されています。

■セキュリティ

実行ポリシー

PowerShellスクリプト実行に対して、「実行ポリシー」設定により、以下の種類のセキュリティ制約を設定できます。
・Restricted
・AllSigned
・RemoteSigned
・Unrestricted

デジタル署名

スクリプトにデジタル署名を行えるため、「スクリプト作成者識別」や「スクリプト安全性保証」に使用できます。

■下位互換性

PowerShellは下位互換性を保持しているため、「バッチファイル」や「WSH(Windows Script Host)」などの既存資産をそのまま利用できます。

WSHから呼び出すCOMオブジェクトも実行できます。

「PowerShell」のオブジェクト指向設計

「PowerShell」のオブジェクト指向設計

■オブジェクト指向

PowerShellは、オブジェクト指向に基づいて設計されています。

構造化データ(JSON/CSV/XMLなど)や、REST APIを処理するために最適化されたオブジェクトモデルを提供します。

■オブジェクトパイプライン

PowerShellは「パイプライン」という概念を実装しています。これにより、あるコマンドレットの出力をオブジェクトとして別のコマンドレットの入力としてパイプすることができます。

パイプラインは、メソッドチェーンに似ているもので、関数型言語の考え方が取り入れられています。

コマンドレット間のデータ受け渡しは、古典的UNIX型アプローチである「テキスト入出力パイプ」ではなく、「.NET Frameworkの構造化.NETオブジェクト」を直接やり取りします。

プロパティ情報を保持したままのオブジェクトを次々と後続コマンドレットに渡していけるメリットがあります。

結果として、PowerShellは、他のシェルで経験を積んだユーザーにとって使い慣れたインターフェースで、新しく強力なコマンドラインパラダイムを提供します。

■プロバイダモデル(階層的データ構造アクセス機構)

PowerShellでは、「プロバイダモデル」で階層的データ構造にアクセスします。

データアクセス

「ファイルシステム」「レジストリ」「デジタル署名」「環境変数」「エイリアス」「スクリプト変数」「関数」などのさまざまなデータ種類に対して、データストアに格納されているデータファイルのようにアクセスできます。

プロバイダ

「ファイルシステムブロバイダ」「レジストリブロバイダ」のように、データ種類ごとにプロバイダが用意されています。

プロバイダモデルは拡張可能で、独自プロバイダを作成して、PowerShellに組み込むことが可能です。

データアクセス手法の統一

以前のコマンドプロンプトのようなシェルでは、扱うデータごとに異なる操作が必要でしたが、PowerShellでは、プロバイダモデルにより、あらゆるデータ種類に対して、統一された手法でアクセスできるメリットがあります。

「PowerShell」のスクリプト言語機能

「PowerShell」のスクリプト言語機能

■本格的スクリプト言語

PowerShellは本格的スクリプト言語としての機能も備えています。

高度な文法を備えているため、コマンドレットを組み合わせて「一連の処理」や「複雑な処理」をスクリプトとして記述し、複雑で高度なスクリプトを作成できます。

RubyやPythonなどのモダンなスクリプト言語に近い感覚で処理を記述できます。

以前のコマンドプロンプトでは、コマンドを逐次実行する「バッチ」を利用していましたが、PowerShellではコマンドレットや内部コマンドを組み合わせたPowerShellスクリプトを使用できます。

PowerShellスクリプトにより「システム管理処理の自動化」をより容易に実現できます。

例えば、「Excel上のデータからActive Directoryのユーザーアカウントを自動的に作成する」などのような複雑な処理を比較的簡単に記述できます。

■C#構文風

PowerShellスクリプトの構文は、.NET Frameworkをベースとしているため、プログラミング言語「C#」の構文と多くの類似点があります。

オブジェクトメンバに対してC#構文のような表記法を使用してアクセスします。

C#に精通しているユーザーにとっては、スムーズに導入しやすいメリットがあります。また、逆に、PowerShellを習得することで、C#のスタイルを理解しやすくなります。

■例外処理メカニズム

PowerShellは.NETベースの例外処理メカニズムを提供します。

エラーの場合は、エラーに関する情報を含むオブジェクト(Exceptionオブジェクト)がスローされ、「try … catch」コンストラクトによりキャッチされます。

例外をスローせずに、自動的に実行を再開するように構成することも可能です。

■主なスクリプト言語機能

PowerShellは、スクリプト言語として、各種制御構文や機能を使用できます。
・変数定義—変数スコープ(global、script、local)
・関数定義—匿名メソッド
・分岐構文—if-then-else、switch
・ループ構文—while、do、for、foreach
・例外処理+クロージャ
・ラムダ式
・ハッシュテーブル
・配列スライシング など

「PowerShell」の関連ツール

「PowerShell」の関連ツール

PowerShellには、さまざまなツールが用意されています。

■PowerShellデバッガ

デバッガは、PowerShellスクリプトのバグを発見して問題を解決するために役立ちます。

「PowerShellデバッガコマンドレット」を使用して、PowerShellコマンドラインセッション内で直接デバッグを実行できます。

また、Visual Studio CodeのようなGUIツールを使ってPowerShellコードをデバッグできます。

→GitHub →PowerShell / docs / learning-powershell /debugging-from-commandline.md

■テストツール「Pester」

Pesterは、PowerShellのためのテストフレームワークで、以下の機能を提供します。
・テストランナー
・アサーション
・モッキング
・コードカバレッジ
・継続的インテグレーションツール連携 など

→GitHub →pester/Pester

■パッケージマネージャー「PowershellGet」

「PowerShellGet」とは

PowerShellGetは、PowerShellのパッケージマネージャです。

ユーザーはPackageManagementコマンドレットを使用してモジュールやスクリプトなどのPowerShell成果物について検出/インストール/更新できます。

→GitHub →PowerShell / PowerShellGet

リポジトリ「PowerShell Gallery」

PowerShellギャラリーは、PowerShellコンテンツのリポジトリです。

さまざまなコマンドやリソースが登録されています。

→PowerShell Gallery

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

この記事のタグ一覧

おすすめの記事

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

「 2029年問題 」とは、高校でのデジタル教育改革により、新入社員と既存社員間でデジタルスキル格差が拡大する懸念を指します。企業は早急に対応が求められています。この格差は、企業競争力や業務効率にも、影響を及ぼす可能性があります。

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

「 VMWare 」の仮想化技術は、「ITインフラの効率化」に大きく貢献する技術ですが、Broadcomによる買収後のライセンス変更が大きな問題として注目されています。柔軟で慎重な契約見直しが今後の鍵となります。

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

経済産業省による「 生成AI 利活用ガイドブック 」は、企業やクリエイター向けに、安心して「生成AI」を利用するための、「指針」「実例」「注意点」を明示しています。「業務効率化」や「新しいアイデア創出」の支援を目的としています。