[TechNet]Windows PowerShell入門

Microsoft スクリプトセンターにてWindows PowerShell オーナーマニュアルという記事が公開されています。

第1回はPowerShell入門です。

記事の最後の方で PowerShell Week の Web キャスト (English) も紹介されています。

是非ご一読ください。

[PowerShell 2.0 入門] PSドライブ

PSドライブとは、PowerShellからファイル、フォルダ、レジストリなどにアクセスするための手段です。

従来のコマンドプロンプトの場合はファイル操作しかできなかったのですが、PowerShell で取り入れられたPSドライブによって、ファイル、フォルダ、レジストリなどに一貫した操作方法で取り扱うことができます。

PSドライブとして扱うことができるもののリストは Get-PSDrive コマンドレットで取得することができます。

Providerという列を見ると、Alias(エイリアス)やCertificate(デジタル署名)、Environment(環境変数)、Registry(レジストリ)、FileSystem(ファイルシステム)、Variable(変数)、WSMan(WinRMサービス)などがあることを確認できます。

もしもファイルシステムの一覧のみを取得したい場合には -PSProvider パラメータを使用して(Provider列にある名称を指定することができます)

Get-PSDrive -PSProvider filesystem

と入力します。

レジストリの一覧を取得したい場合には

Get-PSDrive -PSProvider Registry

と入力します。

さて、PSドライブの一覧を取得する方法がわかりました。

PSドライブは、ファイルシステムを操作する要領でアクセスできるので

Set-Location HKCU:

とすると、レジストリのHKEY_CURRENT_USERにアクセスすることができるようになります。

Set-Location コマンドレットはカレント変更するコマンドレットです)

コンソールウィンドウをよく見ると、 カレントが「PS C:\Work」から「PS HKCU:」に変わっていることを確認できます。

ファイルシステムに戻る場合も Set-Location コマンドレットを使用して

Set-Location C:\

のように入力します。

Set-Location コマンドレットは、cd というエイリアスを持っていますので

cd c:\

と入力することも可能です。

このようにPSドライブという仕組みがあることで、レジストリやその他のプロバイダもファイルシステムを操作するように取り扱うことが可能です。

[PowerShell 2.0 入門] 出力をファイルに保存する

PowerShell で実行した結果をファイルに保存したい場合は Out-File コマンドレットを使用します。 (リダイレクション演算子(>)を使用することもできます。) たとえば、現在のプロセス一覧をファイル(たとえば C:\Work\Cmdlet.txt)に保存する場合は下記のようにします。 ファイルが存在しない場合は新規で作成されます。

Get-Process | Out-File -FilePath C:\Work\Process.txt

-FilePath パラメータは省略可能なので下記のように記述することができます。

Get-Process | Out-File C:\Work\Process.txt

次に Out-Fileで使用できるパラメータを見てみましょう。


Append

出力内容を、既存のファイルの末尾に追加します。

Get-Process | Out-File C:\Work\Process.txt -Append

Force

既存の読み取り専用ファイルの上書きを許可します。

Get-Process | Out-File C:\Work\Process.txt -Force

Encoding

出力ファイルのエンコーディングの種類を指定します。 指定できる値は、Unicode、UTF7、UTF8、UTF32、ASCII、BigEndianUnicode、Default、OEM です。既定値は Unicode です。

Get-Process | Out-File C:\Work\Process.txt -Encoding UTF8

NoClober

既存のファイルがある場合には上書きをしません。既定では上書きするようになっています。

Get-Process | Out-File C:\Work\Process.txt -NoClober

InputObject

書き込むオブジェクトを指定します。

$cmd = Get-Process
Out-File -InputObject $cmd -FilePath C:\Work\Process.txt

Width

1行の文字数を指定します。文字数を指定した場合、1行に収まらない文字は切り捨てられます。

Get-Process | Out-File C:\Work\Process.txt -Width 40

[Tips] コマンドレット一覧表を作成する

下記は PowerShell で使用可能なコマンドレットの一覧をファイルに出力します。
通常 Get-Command は CommandType, Name, Definition の3つの列を出力するので、Select-Object でName列だけを出力し、結果をファイルに保存しています。

Get-Command -CommandType cmdlet | Select-Object Name | Out-File C:\Work\CmdletList.txt

[PowerShell 2.0 入門] 出力結果を1ページずつ表示する

出力結果が大きいと1ページに収まりきらない場合があります。

このような場合は、Out-Host コマンドレットを使用すると、出力結果を1ページずつ参照することができます。

Out-Host コマンドレットの書式は下記の通りです。

Out-Host [-InputObject <psobject>] [-Paging] [<CommonParameters>]

たとえば、Get-Command でコマンドレットの一覧を取得して1ページずつ見るには

PS> $cmd = Get-Command
PS> Out-Host -InputObject $cmd -Pageing

Out-Host コマンドレットはパイプラインから受け取ることもできるので

PS> Get-Command | Out-Host -Pageing

のように記述することもできます。

また、more関数を利用して

PS> Get-Command | more

と記述しても、同様の結果を得ることができます。

[PowerShell 2.0 入門] コピー&ペースト

PowerShell コンソールウィンドウで文字列をコピーするには、コピーしたい文字列を選択してマウスを右クリックします。

ペーストしたい場合は、コンソールウィンドウでマウスを右クリックする。

コピーもペーストも右クリックでOKということです。