2011-04-12 57 views
2

我在使用Powershell CmdLet測試路徑時遇到問題。測試路徑/ System.IO.Directory::存在未按預期方式工作

我在服務器上創建了一個共享(\\ Servername \ MyShare $),它允許一組用戶創建文件並追加數據,而其他用戶只能讀取和刪除這些文件。第一組不允許做其他事情,包括讀取權限,讀取屬性等等。

如果我在此文件夾上作爲「僅丟棄文件」組的成員執行測試路徑,它將返回false。即使[System.IO.Directory]::Exists()也會返回false。

我正在尋找一種方法來測試一個目錄是否存在,而不需要具有讀取權限或讀取屬性權限。有任何想法嗎?

這是這兩種方法的正確行爲嗎?

問候, teamoo

+0

這將有助於查看您實際使用的PowerShell代碼。 – beefarino 2011-04-13 15:16:53

+1

@beefarino代碼非常簡單:'Test-Path「\\ server \ Share $」'我甚至嘗試過使用相同的結果:'[System.IO.Directory] ​​:: Exists(「\\ server \ Share $ 「)都返回false,而共享實際存在,但我不允許訪問它,這不是用兩種方法返回False的原因(在我看來)。 – teamoo 2011-04-14 07:03:06

回答

2

好了,如果沒人想創業......

下面是一個解決方案:

我'不允許訪問目錄.\f1\f2.\f1\f3不存在。

PS C:\Silogix> Get-ChildItem .\f1\f2 -ErrorAction silentlycontinue 
PS C:\Silogix> $Error[0].exception 
L'accès au chemin d'accès 'C:\Silogix\f1\f2' est refusé. 
PS C:\Temp\Temp> $Error[0].exception.gettype() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  UnauthorizedAccessException    System.SystemException 

PS C:\Silogix> Get-ChildItem .\f1\f3 -ErrorAction silentlycontinue 
PS C:\Silogix> $Error[0].exception.gettype() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  ItemNotFoundException 

所以,如果你以後考$Error[0].exception.gettype()Get-Item你能理解爲什麼它不能訪問,所以如果它存在與否。你可以稱之爲「bricolage」,但它也是一個解決方案。對不起,在這個例子中的法國人。

+0

感謝您的代碼。我想出了一個類似的解決方案:'try {gc「\\ server \ Share $」-erroraction Stop} catch [System.SystemException] {if($ _。Exception.gettype()-eq [System.UnauthorizedAccessException]){ #access被拒絕}}'是否有人會考慮這種行爲(回答一個目錄不存在,儘管它存在)一個錯誤? – teamoo 2011-04-14 07:05:47

+1

不是一個錯誤,'Test-Path'的_semantic_並不是唯一被記錄的。實際上'Test-Path'意思是這個項目存在並且可以被讀取。 – JPBlanc 2011-04-14 07:25:38