如何在 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+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告