マジセミドライブ

ウェビナー関連のニュースや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分用語解説】「 6G 」とは?「5G」とどう違うのか📶

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

2024.12.11

【デジタル寺田の3分用語解説】「 6G 」とは?「5G」とどう違うのか📶

「 6G 」は、2030年商用化を目指す次世代通信技術で、「5G」の数十倍~100倍の速度を実現。エネルギー効率やセキュリティが向上し、「メタバース」「医療」「教育」など多分野で活用が期待されており、私たちの生活や社会の在り方を大きく変革する可能性を秘めている。

【デジタル寺田の3分用語解説】 2025年「 リスキリング 」の課題📚

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

2024.12.11

【デジタル寺田の3分用語解説】 2025年「 リスキリング 」の課題📚

2025年の リスキリング 課題は、「企業の人材投資不足」「長時間労働」「自己学習時間の短さ」「職能資格制度」が妨げとなり、「スキル不足を招く悪循環」が指摘されています。企業が未来の競争力を得る鍵であり、AIやテクノロジー進化への対応が急務です。社会全体での意識改革も必要となっています。

【デジタル寺田の3分用語解説】 サイバー犯罪者向けの生成AI「 WormGPT 」とは?🐛

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

2024.12.11

【デジタル寺田の3分用語解説】 サイバー犯罪者向けの生成AI「 WormGPT 」とは?🐛

「 WormGPT 」は、サイバー犯罪者向けに開発された生成AIツールで、セキュリティや倫理的な制限がなく、「フィッシングメール作成」や「マルウェア開発」を簡易化します。「As-a-Service」モデルで提供され、アクセスが容易で、犯罪の精度と規模を向上させる脅威となっています。