2012-02-23 25 views
1

名前に角括弧が含まれているので、Powershellで扱うのに少し問題があります。ディレクトリのACLを取得するには、Get-Aclコマンドを使用する代わりにDirectoryInfoGetAccessControl()メソッドを使用する必要があります。Powershellを使用しているディレクトリのGetAccessControl()はデータを返しません

残念ながら、GetAccessControl()を使用すると、どのディレクトリでも結果が返されません。以下のスクリプトを参照してください。

Path  Owner  Access 
----  -----  ------ 

私は角括弧が含まれているディレクトリ名を$ジのインスタンスを取得するために見つけた唯一の方法は脱出することです:私は空のACLによって意味することはこれです

$filename = "C:\somefolder" 
$di = get-item $filename 
$di | get-acl # this returns the correct ACL data as expected 
$di.GetAccessControl() # this shows an empty ACL (see below output) 

ダブルバックティック

$filename = "C:\some``[folder``]withsquarebrackets" 

私はこれを行うと、その後$di = get-item $filenameを実行した場合、$diは、それが指定されたフォルダの詳細が含まれていることを示しているとブラケット。しかし、この場合には、異なる結果が残りの二行で返されます。

$di | get-acl  # does nothing, doesn't even show an empty ACL 
$di.GetAccessControl() # shows an empty ACL as seen above 

誰もが自分の名前に角括弧が含まれているそのうちのいくつかは、私は確実にフォルダの列挙のためのACLを取得することができますどのように説明できますか?

アップデート2012-02-23 16:アンディArismendiは、それが彼のために働いていたと報告した後31Zは、私はGetAccessControl()が影響を受けたマシンがどのようにPowerShellの1.任意のアイデアを実行するPowerShellの2で正常に動作するようことを確立 Powershell 1を使用してこれを解決しますか?

答えて

0

Pathプロパティはnullですが、動作しているようです。

$f = Get-Item 'C:\some `[folder`]' 
$f.GetAccessControl() 
$f.GetAccessControl().Access 
+0

興味深い。私は別のマシンでそれを試して、それは動作します。元のマシンはPowershell v1を実行しており、動作しているマシンはPowershell v2を持っています。どちらのマシンでも、ファイル名に角カッコが含まれている場合、$ fをGet-Aclコマンドレットにパイプしても結果は返されません。 –

+0

私は明らかにダブルバックティックについて間違っていましたが...ファイル名に1つのバックティックが同じ結果をもたらします。 –

+0

@RichardFawcettこの[バグ](https://connect.microsoft.com/PowerShell/feedback/details/544237/filename-bracket-problem)レポートをご覧ください。誰かが回避策を投稿した、私はそれを私の答えに加え、試してみてください。 –

1

大括弧で囲まれた問題は、大括弧がワイルドカードであるためです。あなたがgetaccesscontrolを使用して、GET-アイテムをやって立ち往生しているので、

$di = get-item -literalpath C:\some[folder]withsquarebrackets 
$di.getaccesscontrol() 

は、残念ながら彼らは、get-aclのための-literpathパラメータが含まれていませんでした:あなたは-LiteralPathパラメータを使用して、すべてのエスケープを避けることができます()メソッドを呼び出してアクセスリストを取得します。 Get-Aclには、V3に-literalpathパラメータがあります。

+0

+1これは本当に助けになりました。私の場合、無効なパスは 'FileSystemObject.GetFolder.SubFolders'によって返されました。だから、私のスクリプトは数分間実行され、突然何の理由もなく破られます。さらにもう1人のMS警告がそれを後ろに蹴った。ワイルドカードには常に良い理由がありますが、このパスはWindowsによって返されましたが、スクリプトはそれを以前は知りませんでした。 –

関連する問題