2017-02-28 86 views
2

我正在處理腳本以獲取我的網絡中所有共享的ACL。我有三個單獨的UNC路徑,我正在運行它。三個中的兩個完美地工作,返回所有子項和權限等。然而,第三UNC路徑返回以下錯誤:Get-ChildItem找不到路徑,因爲它不存在

Get-ChildItem : Cannot find path '\\storagesrvr' because it does not exist.

我已經驗證該位置可通過使用資源管理器。我覺得有趣的是,如果我在該路徑的任何子分支上使用GCI,它就會起作用。什麼可能會阻止GCI檢測共享的根源?

編輯(根據要求從評論):我沒有問題的其他兩個股票被命名爲\\networkpath\share。但是因爲我只看根,GCI沒有工作。

+1

遠程設備命名空間的根不是一個目錄 - '\\ computer'甚至不是一個完全有效的UNC路徑根據[規範](https://msdn.microsoft.com/en-us/library/gg465305.aspx)。從遠程機器上的'Win32_Share' wmi類中檢索共享名,並且一個接一個地逐出'Get-ChildItem' –

+1

我認爲這也是相關的(PowerShell Gotcha'UNC路徑和提供者'):https:// powershell。 org/2014/02/20/powershell-gotcha-unc-paths-and-providers/ –

+1

查看[PowerShell獲取文件夾共享列表](http://superuser.com/q/769679)獲取有關如何獲取網絡共享列表 – JeremyE

回答

3

正如我在評論中提到\\computername只是一個片面的UNC路徑(請在[MS-DTYP] Windows Data Type specification的UNC語法)。

資源管理器「知道」這一點,所以它在後臺執行一些黑魔法操作,以便您可以瀏覽遠程計算機上的共享資源。

可以效仿這一點,通過查詢遠程機器上的Win32_Share WMI實例:

foreach($Share in Get-WmiObject Win32_Share |?{$_.Name -not 'IPC$'}){ 
    Get-ChildItem "\\$($Share.__SERVER)\$($Share.Name)" 
} 
2

錯誤消息字面上是正確的。 \\storageserver不是一個路徑。它是兩個反斜槓,後跟一個計算機名稱。

給它添加一個共享名稱,它就成爲一個路徑;例如\\storageserver\sharename

+0

好的,但是不應該在最後添加反斜槓和通配符來查找所有共享? – T4RH33L

+1

不,不幸的是,一廂情願的想法並沒有導致功能的存在。) –

2

您可以通過撥打列出股份:

net view \\<computername> 

來源: PowerShell Get List Of Folders Shared

+0

這不是一個PowerShell的答案,這個'get-WmiObject -class Win32_Share -computer dc1.krypted.com'可能是你的意思嗎? –

+1

不錯,但是它可以與powershell一起使用,而不像get-wmiobject不需要額外的特權或協議來啓用。 –

+0

夠公平的,你有我的投票先生。可能希望將它添加到您所做的原始答案中,因爲它確實提出了一個有效的觀點。在大多數情況下,網絡視圖在計算機上使用共享的Windows域上工作,因爲它們需要啓用打印機和共享,這是網絡視圖依賴它來枚舉它們的依據。 –

相關問題