入力も出力もテキスト:千のバッチを壊してきた限界
cmdはテキストシェルです。dirは整形された列を出力し、本当に欲しかったもの——サイズ、日付、名前——はページに貼り付いた文字として届き、後から切り離すしかありません。そんな解析の上に築いたスクリプトは、ロケールが月名の綴りを変えた日、列が広がった日、ファイル名に空白が入った日に壊れます。バッチファイルを保守した人なら誰でも儀式を覚えています。FOR /Fのtokensとdelimiters、小さな祈り、そして別の言語で応答するマシン用の第2版です。
2006年に登場し.NET上に構築されたPowerShellは、まさにそれを終わらせるために設計されました。Get-ChildItemは行を印字しません。Name、Length、LastWriteTime、Extensionをデータとして持つFileInfoオブジェクトを返します。コマンド間のパイプラインはそのオブジェクトを丸ごと渡すので、東京で書いたフィルタはミュンヘンでも同一に動き、合計値は信用するしかない文字列ではなく、丸めて書式化できる数です。
動詞-名詞のcmdletが、クリーンアップ道具のあるべき流れを作る
ここでのコマンドは動詞-名詞という名のcmdlet——Get-ChildItem、Where-Object、Measure-Object、Remove-Item——で、この規律は見栄えの問題ではありません。承認された動詞は半年後のパイプラインを読めるままに保ちます。ラベル付き工具箱が謎のドライバーの引き出しに勝つのと同じです。クリーンアップでは、単一のコマンドより組み合わせが重要です。探す、絞る、測る、消すが、バッチ構文4段落ではなく1行のオブジェクトの流れになります。各段階が自ら名乗るので、慌てて書いた一行も1か月後には文として読めます。
もっと静かな利点は安全性です。Remove-Itemは-WhatIfを受け付けます。実行するはずの削除をすべて表示して、1つも実行しない。そして-Confirmはファイルごとに尋ねます。cmdにはついに無かったドライランです。Get-AppxPackageはRemove-AppxPackageへ直行できるので、同梱アプリの削除はレジストリ狩りではなくパイプラインになります。削除が無害になるわけではありませんが、検査可能になる——それこそクリーンアップスクリプトに常に欠けていた性質です。
- Get-ChildItem $env:TEMP -Recurse — ファイルごとにFileInfoオブジェクト、LengthとLastWriteTimeはデータとして
- Where-Object Length -gt 100MB — オブジェクトへのフィルタ。ロケールや列幅に左右されない
- Measure-Object Length -Sum — ギガバイト合計は数値として。再解析すべき文字列ではない
- Remove-Item ... -WhatIf — 実行するはずの削除をすべて列挙するドライラン
- Get-AppxPackage *zune* | Remove-AppxPackage — appx削除を1本のパイプラインで
cmdが依然勝つ場面と、正直な限界
PowerShellは無料ではありません。cmdより起動が遅く、実行ポリシーはSet-ExecutionPolicy -Scope CurrentUser RemoteSignedより前にダウンロードした.ps1を実行しようとする初心者を止めますし、ドライブ全体への再帰的なGet-ChildItemは専用スキャナの横では這うように遅い。定番——ipconfig、sfc、powercfg——にはcmdの方が軽い窓であり続け、ここにある何ものもその20のコマンドを引退させません。
もう一つの正直な限界は並行性です。削除は単一スレッドで走るので、小さなファイルの巨大なツリーには必要なだけ時間がかかります。それでも天秤は明らかです。削除の前に測り、絞り、報告するすべての作業において、PowerShellはシステムを、削ぎ落とす画面ではなくデータとして扱います——そして続編の記事の一行コマンドには、コピー&ペースト以外何も要りません。
よくある質問
WindowsのクリーンアップではPowerShellの方がcmdより優れていますか?
絞り込み、計測、削除のドライランを伴う作業では、はい。オブジェクトのパイプラインはあらゆるロケールを生き延び、実行前に報告します。ネットワークと修復の定番——ipconfig、sfc、chkdsk——では、cmdが引き続き軽い窓です。
Windows PowerShellとPowerShell 7の違いは何ですか?
Windows PowerShell 5.1はOSに同梱され.NET Framework上で動きます。PowerShell 7は別途インストールするクロスプラットフォームの後継です。クリーンアップの一行コマンドはどちらでも変わらず動きます。
購入前にライセンスの内容をご確認ください。
一度限りの 30 分試用では基本ツールを利用できます。PRO 機能は有料ライセンスを有効にするまでロックされています。
次に読む記事
お問い合わせ: [email protected]