如何在 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
广告