Microsoft PowerShell は素晴らしいスクリプティングプラットフォームです。 Microsoft は、ほぼすべての Windows Server の役割と機能に対して PowerShell サポートを提供しています。 PowerShell を使用して、繰り返されるタスクを自動化したり、通常 GUI ツールを使用して実行するタスクをコマンドラインを使用して簡単に実行したりすることができます。 例えば、本番環境でWindowsサーバーのパッチ適用状況を確認する必要がある場合、各サーバーに個別に接続してパッチ適用状況を確認するよりも、PowerShellスクリプトのアプローチを使用する方がはるかに簡単である。 私は PowerShell の常用ユーザーであり、18 年の IT 経験で何千もの PowerShell スクリプトを設計してきました。
PowerShell 以前は、Windows 操作タスクを実行する主なスクリプト言語は Visual Basic Scripting でした。 Visual Basic スクリプトはまだ存在し、多くの IT 管理者はまだ VB スクリプトの使用を好んでいますが、PowerShell がコードの複雑さを軽減していることは言及に値します。 例えば、Windowsコンピュータのサービスをチェックするためには、VBScriptのコードをメモ帳に書き、そのファイルを.VBSとして保存し、CSCriptホスト実行ファイルを使用して実行する必要があります。 しかし、PowerShellを使用すれば、簡単なGet-Serviceコマンドレットを使用して、Windowsコンピュータからサービスを素早くリストアップすることができます。 VBスクリプトを使って出力をファイルに保存する必要があった場合、VBスクリプトの中で、ファイルを開いて、その内容をファイルに書き込むというコードをまたたくさん書く必要がある。 PowerShellでは、PowerShellコマンドレットで取得した内容をファイルに書き込む前に、ファイルを開く必要がないだけです。 必要なのは、「Export-CSV」または「Add-Content」コマンドレットを使用することだけです。 PowerShell スクリプトの構成要素
PowerShell にはコマンドレット (「コマンドレット」と発音) があり、コマンドラインツールと呼ばれることもあります。このコマンドレットを使用して、OS に関する情報、Windows コンピューター上にインストールしたアプリケーション、ネットワーク情報、Windows コンピューター上のパッチの状態など、多くの情報を取得することが可能です。 PowerShellコマンドレットは、.NETで書かれており、必要なタスクを実行するために.NETクラスを使用することに注意することが重要です。 ローカルコンピューターで利用可能なPowerShellコマンドレットを確認したい場合は、次のコマンドを実行します。
Get-Command
Get-Command は、ローカルコンピューターにインストールされているコマンドレット、関数、フィルター、およびPowerShellスクリプトを取得するPowerShellコマンドレットです。 上記のコマンドは、ローカルコンピューターにインストールされているすべてのPowerShellモジュールを照会します。
Get-Command -Type cmdlet | Sort-Object -Property Noun |FT -GroupBy Noun
3種類のPowerShell操作
PowerShellを使って3種類の操作を行うことが可能です。 それらは、Get、Set、およびRemoveです。 Get」で始まるPowerShellコマンドレットは、通常、Windowsコンポーネントから情報を取得するために使用されます。 例えば、Get-ADUserは、Active Directoryデータベースに対して読み取り操作を行い、ユーザー情報を取得します。 以下に、Get-ADUser PowerShellコマンドレットの使用例を示します。
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com”
上記のコマンドは組織単位にあるすべてのユーザーアカウントを取得しますが、以下のコマンドは単一のActive Directoryユーザーと関連するプロパティーを取得します。
Get-ADUser -Identity JohnThomas -Properties *
「Set」で始まるPowerShellコマンドレットは、Windowsコンポーネント情報を編集するために使用されるコマンドレットです。 例えば、Set-ADUserを使用すると、以下のコマンドのようにさまざまな操作を行うことができます。
Set-ADUser -Identity JohnThomas -HomeFolder \Server1%UserName%
以下のコマンドは、ユーザーJohnThomasのメール属性を設定するコマンドです。
$ThisUser = Get-ADUser -Identity JohnThomas -Properties Mail
$ThisUser.Mail = [email protected]
Set-ADUser -Instance $ThisUser
“Remove” から始まるすべての PowerShell コマンドレットは削除処理を実行するために使用されます。 たとえば、Remove-ADUser は、次のように Active Directory ユーザーを削除するために使用できます。
Remove-ADUser -Identity JohnThomas
Combining PowerShell cmdlets
PowerShellが備える最高の機能の1つは、単一のPowerShellコマンドで2つ以上のPowerShellコマンドレットを結合できることです。 このようなコマンドは、ワンライナー PowerShell コマンドと呼ばれることもあります。 たとえば、Active Directoryから無効になったすべてのユーザー アカウントを削除する必要がある場合、以下のコマンドに示すように、Search-ADAccountとRemove-ADUser PowerShellコマンドレットを組み合わせることができます:
Search-ADAccount -AccountDisabled | Where {$_.ObjectClass -eq “User”}. | Remove-ADUser
上記のコマンドでわかるように、Search-ADAccount PowerShell コマンドレットはアクティブ ディレクトリ全体で検索を実行し、無効なアカウントを探し、そしてパイプ (|) 演算子を使用することによって、Search-ADAccount によって検索されたユーザーに対してのみ削除処理を実行するよう Remove-ADUser に指示していることに注意してください。
PowerShell aliases
多くのPowerShellコマンドレットは読みやすく使いやすいですが、PowerShellにはPowerShell aliasesという機能も用意されています。 PowerShellは賢いので、Tabキーを押すだけでPowerShellコマンドレットの名前を完成させることができます。 PowerShellのコマンドレット名が覚えにくい場合、PowerShellのエイリアスを作成することができます。 たとえば、次のコマンドを使用してGet-MailBoxStatistics PowerShellコマンドレットのエイリアスを作成できます。
New-Alias ShowMB Get-MailBoxStatistics
PowerShellウィンドウで「ShowMB」と入力すると、PowerShellはShowMBエイリアスに関連付けられたコマンドレットを探して、そのコマンドレットを実行するのです。
CSVファイルに情報を保存する
CSVファイルに情報を保存する場合、PowerShellは多くのスクリプト作業を節約します。 PowerShellには「Export-CSV」コマンドレットが用意されており、他のPowerShellコマンドレットと併用することができます。 デフォルトでは、以下のコマンドに示すように、Export-CSVをコマンドの最後に追加しない限り、実行したPowerShellコマンドは、結果の情報をPowerShellコマンドウィンドウに表示します:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com” | Export-CSV C:♪AllUsersInAnOU.CSV
上記のコマンドでは、コマンドの最後に「Export-CSV」を追加して、出力を CSV ファイルにエクスポートしていることに注意してください。 PowerShellは、Get、Set、Removeの3つの操作タスクを実行することができ、PowerShellコマンドレットの97%はこの3つの単語で始まり、PowerShellコマンドレットの機能を容易に識別することができます。 また、PowerShellスクリプトをより効率的にするために、2つのコマンドレットを1つのコマンドにまとめることがいかに簡単であるかについても説明しました