1

「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 の設計で行われたトレードオフの避けられない結果ですが、すべてのコマンドが自動的に恩恵を受けるようにシェル自体にその機能を持たせるのではなく、ワイルドカードを無視するオプションがすべてのコマンドに必要であることは残念です。

4

1 に答える 1

0

この問題は時々私を悩ませ、 -LiteralPath サポートなしでコマンドレットを実行すると最悪です。この場合、別の回避策は、ファイルの短い名前を使用することです。PowerShell Community Extensionsは、Get-ShortPath コマンドレットを使用してこれをサポートしています。

PS> Get-ShortPath '.\foo`[bar`].txt' | Get-Acl -Path {$_}


    Directory: Microsoft.PowerShell.Core\FileSystem::C:\User
    s\Keith


Path                 Owner               Access
----                 -----               ------
FOO_BA~1.TXT         Keith-Laptop-PC\... NT AUTHORITY\SYS...
于 2010-02-25T21:18:21.610 に答える