如何在PowerShell中从远程计算机测试共享位置路径?

很多时候,我们需要从远程服务器测试NAS路径或共享路径位置。这意味着我们需要检查共享路径是否可以从远程位置访问,并且我们当时使用了Test-Path ,但是却收到PermissionDeniedUnauthorizedAccessExcept错误。

我们的示例代码如下所示,在此示例中,我们使用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远程处理支持一层远程处理,这里我们连接到远程计算机,然后再次检查它的共享路径,因此它成为远程处理的2个阶段,而PowerShell不支持它。

要解决此问题,我们可以使用Map驱动器测试是否可以成功连接到它。如果是,则远程服务器可以连接到该路径。例如,

示例

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