コマンド・プロンプトやWSHスクリプトはもう古い!? これからのWindowsシステム管理はPowerShellでスマートに片付けよう。
Windows PowerShell(以下PowerShellと表記)は、コマンド・プロンプトに代わってWindowsを管理するための新しいシェルとして開発され、Ver.1.0が2006年に、Ver.2.0が2009年にリリースされた。PowerShellはクライアントOS(Windows XP/Vista/7)とサーバOS(Windows Server 2003/Server 2008/Server 2008 R2)のいずれでも動作する。
PowerShellについてはすでに本フォーラムでも何度か記事を掲載しているが(関連記事参照)、本連載ではより進んだ活用方法として、PowerShellを用いたシステム管理について解説していく。毎回テーマを決め、実例を挙げながら、PowerShellを使うとどのような管理が可能になるのか、どのようにシステム管理が容易になるのかなどを紹介していく。
さて、PowerShellが新しく登場したシェルであるといっても、「わざわざ学習する必要は本当にあるのか?」という疑問の声もよく聞かれる。実際にコマンド・プロンプトとその外部コマンドでほとんどのシステム管理はこなせる。またWindows OSにはWSH(Windows Script Host)というスクリプト実行環境も備わっている。バッチ・ファイルやWSHスクリプトで十分という認識もあるだろう。しかしバッチ・ファイルで使用する外部コマンドは非常に種類が多く習熟は困難である。WSHはバッチ・ファイルより複雑な処理が記述可能だが、もともとシステム管理用に設計されたスクリプト実行環境ではないため、単純なことをするにも非常に冗長な記述が必要になるという問題を抱えている。
例えば、テキスト・ファイルに現在時刻を書き込むという処理をWSHスクリプト(言語はVBScriptを使用)で書くと次のようになる。
Option Explicit
Dim objFSO, objTextStream
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.CreateTextFile("test.txt")
objTextStream.WriteLine Date & " " & Time
objTextStream.Close()
Set objFSO = Nothing
Set objTextStream = Nothing
このように、ファイルの読み書きというシステム管理では基本となるようなことでも、COMオブジェクトを呼び出すなど非常に多くの記述が必要になる。ところがPowerShellで同様の処理を書くと1行で済む。
Get-Date | Set-Content test.txt
PowerShellはシステム管理用として設計されただけに、このように、システム管理でよく使われる処理は簡潔に記述できるのが特徴だ。
またこれからは、Windowsシステム管理のベースとしてPowerShellが使われることが公式にアナウンスされている。例えばExchange Serverは2007から、すべての操作がPowerShellベースになっており、GUIの操作もコマンドレットを呼び出すことで実現している。Exchangeに限らず、これからのサーバ製品群はPowerShellベースの管理にシフトしていく。逆にいうとPowerShellを覚えておけば、これらのサーバ製品群を自由に自動操作できるということである。
サーバ製品群だけでなく、OS自体の管理にもPowerShellは使われるようになっている。例えばWindows Server 2008 R2におけるActiveDirectoryの管理などでも利用されている(関連記事参照)。しかもActiveDirectoryごみ箱など、一部PowerShellを使用しなければ利用できない機能すら存在する。つまりWindows OSのシステム管理においてPowerShellは必須の知識となりつつあるため、システム管理者はぜひとも覚えておくべきである。
もちろんこれまでのバッチ・ファイルやWSHスクリプトの資産はこれからもそのまま利用可能である。またPowerShellから既存のバッチ・ファイルや外部コマンド、WSHスクリプトを実行することも可能であるし、WSHから呼び出すCOMオブジェクトをPowerShellから呼び出すことも可能だ。既存の資産と知識を活用しつつ、新しく作成するものから徐々にPowerShellに切り替えていくのがよいだろう。PowerShellはWindows 7/Windows Server 2008 R2では標準機能であり、今後登場するWindows OSでも同様になると思われる。今後は実行環境についても頭を悩ませることはない。
以上を踏まえて、本連載の方針をここで述べておく。本連載ではPowerShellによるシステム管理について、毎回テーマを定めてそのテーマについてのPowerShellコンソールでの使用方法およびそれを踏まえたスクリプト・コードを取り上げていく。その際、PowerShellの文法については深くは取り上げないが、WSHスクリプトやバッチ・ファイルとは違うPowerShellならではの簡潔な記述法をメインに取り上げて、時にはバッチ・ファイルやWSHスクリプトと比較しながら説明する。これによってバッチ・ファイルやWSHスクリプトのユーザーのPowerShellへの移行を手助けする予定である。
またバージョンはPowerShell 1.0ベースで解説を行うが、必要に応じてPowerShell 2.0の機能も紹介していく。とはいえ、PowerShell 2.0の正式版がリリースされている現在、PowerShell 1.0をインストールする積極的な理由もないので、PowerShell 2.0をインストールしておいていただきたい(入手やインストール方法については後述)。
システム管理入門という連載の性格上、サーバ管理のテーマが多くなるが、PowerShellはサーバOSのみならずクライアントOSでも使用可能であるため、クライアントの管理にも用いることのできるテーマも扱う予定である。
今後の連載予定は次のとおりであるが、テーマによっては内容を変更して、より詳しく解説することもあるので、あらかじめご了承いただきたい(この目次は連載の公開に伴い、随時更新する予定である)。
第1回:PowerShellの概要―今回。概要の解説
第2回:PowerShellの基礎―PowerShellの基礎文法解説
第3回:ファイル/レジストリの操作
第4回:サービス/プロセスの操作
第5回:イベント・ログの操作
第6回:システム情報(WMI)の取得
第7回:ActiveDirectoryの操作
第8回:IISの管理
第9回:Hyper-Vの管理
第10回:Exchange 2007の管理
Copyright© Digital Advantage Corp. All Rights Reserved.