如何在 PowerShell 中測試遠端計算機上的共享路徑?


很多時候我們需要從遠端伺服器測試 NAS 路徑或共享路徑位置。這意味著我們需要檢查共享路徑是否可以從遠端位置訪問,並且我們使用 **Test-Path**,但我們會收到 **PermissionDenied** 或 **UnauthorizedAccessExcept** 錯誤。

我們的示例程式碼如下所示,在這個例子中,我們使用 **Invoke-Command** 連線到另一臺計算機,然後從中檢查共享路徑是否可訪問。

示例

Invoke-Command -ComputerName LabMachine2k16 -ScriptBlock {
   Test-Path -Path "\ad\Shared\Temp"
}

此指令碼引發異常。

輸出

Access is denied
    + CategoryInfo          : PermissionDenied: (\ad\Shared\Temp:String) [Test-Path], UnauthorizedAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand
    + PSComputerName        : LabMachine2k16
False

這不是許可權問題,而是 PowerShell 遠端處理問題。預設情況下,PowerShell 遠端處理支援一層遠端處理,這裡我們連線到遠端計算機,並再次檢查其共享路徑,因此它成為兩階段遠端處理,而 PowerShell 不支援它。

要解決此問題,我們可以使用對映驅動器來測試我們是否可以成功連線。如果是,則遠端伺服器可以連線到該路徑。例如,

示例

Invoke-Command -ComputerName LabMachine2k16 -ScriptBlock{
   if(New-PSDrive -Name X -PSProvider FileSystem `
      -Root "\Ad\Shared\Temp" -EA Ignore){
       Write-Output "Path is accessible"
   }
}

輸出

Path is accessible

更新於: 2021年3月18日

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.