很多时候,我们需要从远程服务器测试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远程处理支持一层远程处理,这里我们连接到远程计算机,然后再次检查它的共享路径,因此它成为远程处理的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