0
会員になると、いいね!でマイページに保存できます。
言うまでもないが、システムは開発する期間より、運用する期間のほうがはるかに長い。そのため、システム全体の品質向上とコスト低減を考える場合、運用に関わる検討は避けて通れない。こうした場面で用いられるのがコマンドラインインターフェイス(CUI)のシェルおよびスクリプト言語だ。UnixやLinuxなどではあって当たり前だったが、Windows 7以降はWindows OSにも「Windows PowerShell(以下、PowerShell)」が標準搭載されるようになった。このPowerShellもバージョンを重ねており、今では他のシェルに引けを取らない機能を備えるようになっている。ここではPowerShellの具体的な活用方法や利用するメリット・デメリットなどを詳しく解説していこう。
[2021/09/07 09:30修正]
※記事公開時に誤った記載がありました。読者ならびに関係者の皆さまにお詫び申し上げます。本文はすでに修正済みです。訂正内容は記事末尾に記載しています。
PowerShellとは何か?
PowerShellとは、マイクロソフトにより開発されたスクリプト言語とその実行環境の総称である。マイクロソフトのスクリプトといえば、かつてコマンドプロンプトやWindows Script Host(WSH)などの言語とその実行環境が提供されてきたが、それぞれに一長一短があった。
これに対して、PowerShellは、それらの良いところを取り入れ、統一されたインターフェイスを提供するソリューションとしてリリースされた。
近年機能拡張が進んでおり、
公式サイトによると、以下のような位置づけになっている。
PowerShell は、コマンドライン シェル、スクリプト言語、および構成管理フレームワークで構成されるクロスプラットフォームのタスク自動化ソリューションです。
実は現在はWindows以外でも利用可能となっており、様々な展開を見せるPowerShellだが、本稿では最も利用シーンが多いと思われるWindows上でのPowershell利用について、保守運用における簡易自動化をテーマに紹介したい。
PowerShellはどう使う?4つのユースケース
構築や保守運用では、その作業や工程に特化したツール(
Ansibleや
Zabbixなど)を採用することが多いだろう。このようなツールは多くの作業や業務を効率化してくれるが、時にかゆいところに手がとどかないこともある。
PowerShellは、そういったツールの手の届かない隙間を埋める使い方をすることが多い。メインの作業は他のツールに任せ、その穴埋めをPowerShellで行うといった具合に、どちらかというと便利屋の位置づけで利用する。
また、数台程度のWindows Serverで構成される小規模なシステムではツールを導入して保守運用するまでもないことが多い。このような場合はPowerShellが主役になってくるだろう。
いくつかユースケースを挙げてみよう。
Windows OSの構築・設定
PowerShellはマイクロソフトが開発した言語・実行環境ということもあり、特にWindows OS(※本稿では、Windows 10やWindows Serverなどの関連OSを総称してこう呼ぶ)を構築、設定する時に有効だ。Windows OSで人が行う操作は、ほぼPowerShellでスクリプト化が可能である。
一般的にOSに対する設定や構築は定型の作業が多く、一度PowerShellでスクリプトを作成しておくと、多くの作業を簡易的に自動化できる。Windows OSの機能の多くはGUIを使用してウィザード形式で設定していくが、中にはその設定結果をPowerShellのスクリプトとして出力してくれるものもあるくらいだ。
※上述した「Ansible」はOSの構成管理を自動化できるツールで、Windows OSの設定や情報収集には内部的にPowerShellを使用している。
リモートでのサーバ管理
管理対象サーバにわざわざスクリプトを配置しなくとも任意のPCからPowerShellで対象サーバにリモート接続してスクリプトを実行することが可能だ。Windows OS中心のシステムのちょっとした設定変更や情報収集であれば、有用な手段の一つとなる。
Active Directory管理
Active Directory(AD)の運用管理ではPowerShellの用途がさらに広がる。
ADのユーザー管理やグループポリシーの管理は、AD管理者の定常的な保全業務の一つである。PowerShellであればそのような業務の定型部分を容易にスクリプト化し運用可能である。
他のシステムからユーザー情報を連携してもらい、PowerShellでADに取り込んでいるシステムは多いだろう。また、ADユーザーのパスワード変更を検知する、無効になったユーザーを抽出して削除するなど、多くの業務を自動化することが可能だ。
ファイル操作
ファイルの検索、配置・回収、フォルダ作成など、GUIで行う多くの操作もPowerShellで自動化が可能だ。
ファイルの検索などは、頻繁にPowerShellが使われていることと思う。
ここに挙げた以外にも、PowerShellは多くのユースケースにおいて活用できる。WindowsOSを使用したシステムの保守運用に携わる場合は、必ずどこかでPowerShellを使うことになるだろう。
2つの応用的な使い方
上記を基本的な利用方法とすれば、ここではPowerShellを使う上で、いくつか筆者が考える利点やハマりやすいポイントを少し挙げてみたい。
習得が容易であるがゆえに、経験の浅い若い技術者がスクリプト作成を担当するケースも多いと思うが、最初にハマる可能性は充分あるだろう。ぜひベテラン技術者の方や管理者の方は事前にアドバイスしてあげてほしい。
なお、こちらはあくまでも筆者の私見なので、違うと感じる方もいるかもしれないが、その点はあらかじめご了承いただきたい。
リモートアクセスによるサーバ管理
上述したリモートでのサーバ管理は、PowerShellを保守運用で使用する場合に多用することになるだろう。具体的に言うと、リモートデスクトップなどの仕組みを使って対象サーバにログオンし、あらかじめ用意したPowerShellスクリプトをコピーして配置し、対象サーバ上でPowerShellを起動して実行する。
もちろんこれでも作業は可能だが、少し手間をかければ、PowerShellのスクリプトで対象サーバへログオンするところから自動化することができる。
ここでは、InvokeというPowerShellコマンドレットを使用して、対象サーバ上でスクリプトを実行できる。複数の対象サーバに繰り返し同じような処理を実施したい場合、対象サーバの認証情報を外部ファイル等で定義しておき、PowerShellスクリプトで認証情報を読み込んで接続、処理の実行、実行結果取得、などを繰り返し処理していけば、容易に実現が可能である。
<注意点>
リモート接続したコンピュータ上でInvokeを使用して実行した処理の結果は、Invokeコマンドレットの戻り値として取得することができるのだが、そこには取得可能なデータサイズに制限がある。
リモート接続元のコンピュータへは、実際にPowerShellスクリプトで処理を実施したリモート接続先のコンピュータからの通信が文字列データで返ってくる。ここで通信可能な文字列データのサイズ(文字数)に制限があるため、あまりに大きな結果を返すような処理を書くと、うまく動かない。
※本稿執筆にあたり、この制限文字数を思い出せず再調査したのだが、残念ながら公式サイトで見つけることができなかった。読者の方には大変申し訳ないが、リモート処理でInvokeコマンドを使用する際は、是非実際の戻り値の文字数制限についてご確認いただきたい。
Windowタスクスケジューラーとの組み合わせ
PowerShellのスクリプトを定期的にスケジュール実行する場合は、Windowタスクスケジューラーを使うことが多い。このあたりの使い方はWeb上に情報がたくさんあるので、ここでは割愛するが、基本的な注意点は押さえておきたい。
<注意点>
スクリプト実行時のパスを意識する。アプリケーション開発者であれば当たり前のことだが、実行するPowerShellスクリプトの中の書き方と合わせて考慮しておかないとうまく動かない。
タスクスケジューラーでPowerShellスクリプトの実行を設定する際には、そのスクリプトをどの「パス」で動かすのか、という設定項目がある。PowerShellスクリプト内で任意のパスのファイルにアクセスする際に相対パスで書いている場合は、PowerShellスクリプトで意図したパスで動かすようにタスクスケジューラー側で設定していないと、所望のファイルにアクセスできずエラーとなる。
【次ページ】他の言語と比較したPowerShell活用のメリット
関連タグ