ファイルの内容をクリアする
Clear-Contentコマンドレットを使用すると、指定したファイルの内容をクリアします。エイリアスはclcです。ファイル自体は削除されません。
次のコマンドはHello.txtの内容をクリアします。クリア後、ファイルサイズが0になっていることがわかります・
PS> Clear-Content Hello.txt PS> Get-Content Hello.txt

ファイルの内容を置き換える
Set-Contentコマンドレットを使用すると、ファイルの内容を置き換えることができます。エイリアスはscです。
下記は、
- Get-ContentコマンドレットでHello2.txtを読み込み
- "こんにちは" という文字列を"Hello"に置き換え
- 上記1,2で作成した文字列を、Hello2.txtへ書き戻し
を行います。
PS> (Get-Content Hello2.txt) | %{$_ -replace "こんにちは", "Hello"} | Set-Content Hello2.txt -Force
PS> Get-Content Hello2.txt
Get-Content Hello2.txtを括弧でくくっているのは、取得が完了してファイルが閉じられるのを待つためです。この括弧がないと、開かれたファイルの内容を書き込もうとするために処理が失敗します。

応用例
最後に1つ応用例を紹介します。
現在稼働中のサービス名一覧が書かれたファイル(C:\Work\Service.txt)を作成する、という課題でコマンドを作成してみます。
考え方ですが、サービス名一覧を取得するにはGet-Serviceコマンドレットを使用します。
Get-Serviceコマンドレットは現在登録されているサービス(稼働/非稼働に関係なく)を返すので、ここから稼働中のサービスだけを取得します。つまりWhere-Objectコマンドレットを使用してStatus項目が"Runninng"となっているものを抜き出せばよいと言うことになります。
ここまでのコマンドを作成すると
Get-Service | Where-Object { $_.Status -eq "Running" }
となります。
次に、サービス名だけを抜き出したいので先ほどの結果からForeach-Objectコマンドレットを使用してName項目だけを抜き出します。
ForEach-Object { $_.Name }
最後に、ここまでの一連の結果をC:\Work\Service.txtへ書き出します。ここではSet-Contentコマンドレットを使用することにします。
PS> Get-Service | Where-Object { $_.Status -eq "Running" } | ForEach-Object { $_.Name } | Set-Content C:\Work\Service.txt
長いコマンドとなりましたが、分解して考えれば難しいものではありませんので、業務に応用してみていただければと思います。

まとめ
今回は、ファイルの読み取りと書き込みを中心に説明しました。
システム管理においては、ログファイルの読み取りや作成、ファイル数、ファイルサイズのチェックなど、ファイル操作は必須技術です。今回紹介した基本操作を理解し、他のコマンドと組み合わせて使用することで、日常業務で活用していただければ幸いです。
次回も引き続きファイル操作について説明したいと思います。お楽しみに。
参考文献
- HIRO's.NET
- PowerShell from Japan!!
- 『Windows PowerShell ポケットリファレンス』 牟田口大介 著、技術評論社、2008年4月
- 『Windows PowerShell クックブック』 Lee Holmes 著、マイクロソフト株式会社ITプロ エバンジェリストチーム 監訳/監修、菅野良二 訳、オライリージャパン、2008年10月
