マジセミドライブ

ウェビナー関連のニュースや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

 

参考元サイト

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

この記事のタグ一覧

おすすめの記事

【ChatGPT探訪】「 無限議論 」〜最強スタンド考察〜🤔

ChatGPT探訪

2024.05.07

【ChatGPT探訪】「 無限議論 」〜最強スタンド考察〜🤔

マジセミSNSに投稿した 【担当者A】の「 無限議論 」〜最強スタンド考察〜💬 を記事化したものです。 ChatGPTに課金していないみなさんにも、 AI同士の議論をお楽しみいただけます👍 ※原稿テキストを放り込むだけで、 ジョジョ風イラストを作成してしまう生成AIがすごくないですか?

【トレンド解説】米国における「 生成AI活用 」最新動向📈

トレンド解説

2024.05.07

【トレンド解説】米国における「 生成AI活用 」最新動向📈

「米国における 生成AI活用 最新動向」について解説しています。生成AIは日本企業にも多くの可能性をもたらし、「デスクワークの効率化」や「業務の自動化推進」に貢献しています。生成AIを理解し、活用することが、グローバルな競争力を高める鍵となります。

経営活動に活用できる 原価管理 を実現するには? 〜製造業の現実的な課題に向き合い、現場視点から改善する原価管理手法の必達プロセスをご紹介〜

ウェビナーまとめ

2024.05.15

経営活動に活用できる 原価管理 を実現するには? 〜製造業の現実的な課題に向き合い、現場視点から改善する原価管理手法の必達プロセスをご紹介〜

2024年3月12日に三菱電機ITソリューションズ株式会社とアットストリームパートナーズ合同会社の共催で、組立加工製造業向けのセミナー「なぜか高くなる原価を管理する 不確実性の時代を乗り切るためのコスト戦略とは」が開催されました。本セミナーでは、製造業における原価管理の現状と改善手法について深く掘り下げ、経営活動への具体的な活用方法を提示しました。今回は、その講演の要点をお伝えします。