PowerShell
ナビゲーションに移動
検索に移動
PowerShellは、マイクロソフトが提供するコマンドラインシェル、またはインタープリター。
歴史・機能[編集]
- バッチファイル~WSH
- MS-DOS時代から現在のMicrosoft Windowsへ至るまで利用され続けているバッチファイル。(いちいち手入力するのではなく)処理を自動的に行うための仕掛けとして今なお現役。しかし出来ないことも多く、複雑な処理には不向き。
- その弱点を補うべくWindows 98よりWindows Script Hostが登場したが、今度はレジストリ操作などの機能が強力過ぎて、WSHスクリプトで記述されたコンピューターウイルスが出回るなど、ユーザーのみならずマイクロソフト自身も頭を抱えることになった。
- マイクロソフトはWSHのこれ以上の強化を諦め、後継としてWindows PowerShellを開発、Windows XPより標準搭載。同時期に公開され、同じく標準搭載していた.NET Frameworkの豊富な機能をコマンドまたはスクリプトから利用できるようにした。
- (.NET:アプリケーションの共通基盤。プログラマーは全くのゼロから全てプログラミングするのではなく.NET Frameworkの上に構築することで、労力を抑えつつ豊富な機能を備えた「Windowsらしい」アプリケーションを開発できる。PowerShellはこの.NET基盤の上に構築されている)
- PowerShell登場
- 従来の黒基調のコマンドプロンプトとは別に青基調のコマンドラインシェルが用意され、従来のMS-DOSコマンドに加えてPowerShellコマンドも入力できる。マイクロソフトはこれをコマンドプロンプトの後継と位置づけ、Windows 10 Creators Update(バージョン1703 2017年春公開)以降、デフォルトシェルがコマンドプロンプトからPowerShellへ(半ば強制的に)変更され、IT技術者の間でプチ騒ぎになった。
- ファイル加工、レジストリ操作などお手の物。Webブラウザ自動操作やActive Directory操作もこなす強力な機能はWSH譲り。一方で、ダブルクリックすることで直ちに実行されるWSHスクリプトと異なり、PowerShellスクリプトは標準の状態ではダブルクリックしても内容がメモ帳で開かれるのみですぐには実行されない等、WSH並の高機能は抑えつつセキュリティにも配慮されている。
- 2つのPowerShell
- 厳密には2系統のバージョン・エディションが公開されている。当初は頭に「Windows」の付いた「Windows PowerShell」が正式名称。v1からv5.1まで続き、文字通りWindows専用であり、Windows固有の機能が利用できる。現在ではv5.1がWindows 10及びWindows 11に標準搭載されており、v5.1までのほとんどの機能を追加インストール不要でPCでもサーバーでも利用可能。
- 対してv6以降はオープンソース、さらにクロスプラットフォームとなり、頭のWindowsを取った「PowerShell」を正式名称とし、Windowsに加えてmacOS及びLinux向けにも公開されており、インストールして利用可能(上記の.NETもオープンソース・クロスプラットフォーム化され、PowerShellもその上に構築)。こちらはWindows10や11以降についても標準搭載されてはおらず、macOS・Linuxと同様に別途インストールの必要あり(今のところ標準搭載の話は聞こえてこない)。
- macOSやLinux向けにも公開されている都合か、v5.1までに備えていたWindows固有機能が削除されている等、Windows PowerShellとは完全に別扱いとなっている(v5.1とv6以降の共存は可能)。マイクロソフトはv5.1までのWindows PowerShellはこれ以上強化せず「後継」のPowerShellへ注力する方針の模様。現在の最新版はv7系。
- シェルとして (オブジェクト渡し)
- macOSやLinuxで昔から愛用されているbashやzshといったUnixシェル界隈に颯爽と参戦した新星PowerShell。Unixシェルと異なり、コマンド〜コマンドのデータをテキストではなく「オブジェクト」で受け渡す点が最大の特徴。これまでのシェルにない長所もあれば短所(やや遅い、結構複雑、一見不自然な仕様が点在するが今更変えられない)もあり、Unixシェルの「対抗馬」となるか否かは意見が分かれている。
- (オブジェクト:ここでは「対象となる物の付随データの集まり」といったような意味。例えばある1つのファイルには「ファイル名」「パス(そのファイルのあるディレクトリ)」「サイズ」「更新日付」「読み取り・書き込み権限」といった付随データがある。これまでのシェルコマンドはコマンドからコマンドへファイル名の文字列、或いはファイルの内容の文字列を渡していたが、PowerShellはオブジェクトとして受け渡しを行い、受け取った側が必要な情報を取捨選択する)
- モジュールの追加
- 上記2つのPowerShellの記述で「v5.1までのほとんどの機能を追加インストール不要でPCでもサーバーでも利用可能」と書いたが、Active Directory管理機能、Microsoft 365管理機能など、モジュールの追加インストールを必要とする場合はいくつかある。
- 逆に言うとPowerShellはモジュール追加により機能拡張が可能であり、各種ハードウェアメーカー(インテル、デル、ヒューレットパッカード、レノボなど)のハードウェア管理機能、各種クラウドサービス提供元(AWS、SalesForceなど)の管理機能など、マイクロソフトのみならずサードパーティー製のモジュールも多数公開されている。
主な使い方・注意点[編集]
- Windowsスタートページ内「Windows PowerShell」を起動。Windows 10以前およびWindows 11初期版では青地に白文字のウインドウが表示される(Win11 22H2以降はWindows Terminalで開かれ、青地ウインドウではない)。この中に各種「コマンドレット」を入力していく。
- PowerShellではコマンドのことをコマンドレットと呼び、コマンドと区別している。コマンドは「dir」「cd」「copy」といった英単語の省略形が多いが、コマンドレットは「Get-ChildItem」「Set-Location」「Copy-Item」といった風に「動詞」-(ハイフン)「名詞」の形を取る。
- (この「法則性」により、必要なコマンドレットを「推測」しやすい。使ったことがなくとも「Set-ChildItem」「Get-Location」「Remove-Item」といったコマンドレットを推測できる)
- よく利用される定番MS-DOSコマンドについては、PowerShellコマンドレットへの別名(エイリアス)が用意されている。
- 例)「echo "Hello, Enpedia!"」とコマンド入力すると、実際にはコマンドレット「Write-Host "Hello, Enpedia!"」が実行され「Hello, Enpedia!」と表示される(ダブルクォーテーション(")で囲まないと行替えされてしまう等、MS-DOSコマンドと全く同じというわけではない)。
- 例)「dir」と入力すると実際には「Get-ChildItem」コマンドレットが実行され、カレントディレクトリ内のフォルダ・ファイルの情報一覧が表示される。
- PowerShellスクリプトはテキスト形式のスクリプト言語(拡張子ps1)で記述する。上記の通り、PowerShellスクリプトは標準の状態ではダブルクリックしても内容がメモ帳で開かれるのみですぐには実行されない。スクリプトを実行するには明示的に許可を与える必要がある等、設計段階の地点でセキュリティが考慮されている。
- 例)コマンドレット「Set-ExecutionPolicy -ExecutionPolicy RemoteSigned」により、一時的にスクリプト実行を許可。
- 例)スクリプトファイル(のパス)、例えば「.\hello.ps1」を入力することでスクリプト「hello.ps1」を実行(事前にスクリプト実行を許可する必要あり)
- PowerShellスクリプトはお好みのテキストエディタ(メモ帳など)で記述しても良いし、v5.1までのWindows PowerShellであれば単語補完・色付け(シンタックスハイライト)・デバッグ機能を備えた専用の「PowerShell ISE」がOS標準搭載されている。ただしPowerShell ISEはWindows専用であり、今後v6以降のクロスプラットフォームに注力するマイクロソフトは代わりにVisual Studio Code(にPowerShell拡張機能を導入)で編集・デバッグするよう案内している。
- 本記事では詳しい記述内容はとても書ききれません…「PowerShell 入門」等とググってください…。
- PowerShellスクリプトはシステム設定値やレジストリを操作できる等、かなり強力な機能を持つ。適当に拾ってきたスクリプトへ不用意に実行権限を与えたり実行したりする行為は、システムを破壊したり情報を漏洩させたりしかねない危険な行為。内容がよく分からないスクリプトはみだりに実行しないこと。初期状態では実行権限がないという特徴を尊重し、本当に必要なものにのみ実行権限を与える等、日頃から扱い方に気を配るべし。
- (一応、恒久的にスクリプト実行を許可する手順は存在するが、許可するにはOS管理権限が必要)
- PowerShell登場以降、マイクロソフトは昔から愛用されてきたコマンドや機能を段階的に廃止し、PowerShellによる代用手段へと誘導しつつある(wmicコマンドの非推奨、等)。上記のように(モジュール追加が必要なものの)Active DirectoryやMicrosoft 365の管理機能を提供したり、最近でもWindowsに発見された脆弱性の修正を補完するスクリプトを公開するなど、ちょっとした処理にPowerShellを活用するようせっせと布教を続けている。
参考文献[編集]
- “PowerShell ドキュメント - PowerShell”. 2023年4月10日確認。
- “PowerShell from Japan!! Blog”. 2023年4月10日確認。
- “PowerShellがオープンソースに、LinuxおよびMac OS X版も提供へ”. 2023年4月10日確認。
- “PowerShell: コマンドレットとは、コマンドとの違い”. 2023年4月10日確認。
- “【PowerShell入門】コマンドレットとは? - 適材適所”. 2023年4月10日確認。
- “PowerShell Gallery からモジュールをインストールするために必要な設定 Microsoft Japan Windows Technology Support Blog”. 2023年5月26日確認。
- “PowerShell ギャラリー - PowerShell Microsoft Learn”. 2023年5月26日確認。
- “Windows クライアントの非推奨の機能 - What's new in Windows Microsoft Learn”. 2023年5月26日確認。
- “Microsoftが「Windows回復環境」(WinRE)の脆弱性に対処するスクリプトを公開 - 窓の杜”. 2023年5月26日確認。
- “PowerShell 開発のための Visual Studio Code の使用 - PowerShell”. 2024年6月16日確認。