「test[1].txt」という名前のファイルがあるとします。これらのコマンドはどちらも出力を生成しません。
PS C:\Temp> dir test[1].txt
PS C:\Temp> get-acl test[1].txt
PS C:\Temp>
良いニュースは、dir
コマンドには、-LiteralPath
文字をワイルドカードとして解釈しないように指示するスイッチがあることです。
PS C:\Temp> dir -LiteralPath test[1].txt
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/25/2010 9:57 AM 5 test[1].txt
悪いニュースは、そのget-acl
ようなスイッチがないことです。これは既知の問題のようです。
そのレポートの観察に従って、私が思いつくことができる唯一の回避策は、このやや厄介な方法で UNC パスを使用することです。
PS C:\Temp> get-acl \\mymachine\C$\temp\test[[]1[]].txt
Directory: Microsoft.PowerShell.Core\FileSystem::\\mymachine\C$\temp
Path Owner
---- -----
test[1].txt MYDOMAIN\myname
によって供給されるパイプラインで get-acl を使用していdir -rec -name
ます。ワイルドカードがどこに表示されるかわからないため、ワイルドカードをエスケープする (そしてパスを UNC 形式に変換する) コードを作成する必要があります。それは少し不器用です。もっと簡単な方法はありますか?ちなみに、私はPowerShell v1.0を使用しています。
意見: おそらく、これは PowerShell の設計で行われたトレードオフの避けられない結果ですが、すべてのコマンドが自動的に恩恵を受けるようにシェル自体にその機能を持たせるのではなく、ワイルドカードを無視するオプションがすべてのコマンドに必要であることは残念です。