无法在Powershell远程会话中访问UNC路径

时间:2013-07-23 14:24:32

标签: powershell mapping remoting invoke

我无法在本地计算机的Powershell远程会话中访问服务器上的UNC路径。我可以直接在Servers Cmd提示符中使用它们。

实际上,我已登录到服务器并将UNC路径映射为本地驱动器(例如X :)。使用登录时重新连接选项。

我有一个驻留在这个X:驱动器中的批处理文件,我想使用本地脚本中的invoke命令远程运行它。但是,它失败了。

它说“找不到驱动器。名称为X的驱动器不存在”。

此外,当我尝试使用scriptblock中的net use命令映射驱动器时,它也会抛出错误 - 系统错误1223 - 本机命令错误。

我使用管理员凭据登录此服务器。

任何人都可以帮我解决这个问题,我想要做的就是远程运行这个UNC路径上的脚本吗?

另外,当我将服务器中的UNC路径映射为本地驱动器时,为什么我无法在PS远程会话中使用它?

先谢谢。 TS

3 个答案:

答案 0 :(得分:10)

你真的有三件不同的事情发生在这里。

1& 3.只有在以交互方式登录时才会映射驱动器。因此,当您远程连接到另一台计算机,映射驱动器,然后注销/断开连接时,该映射驱动器已断开连接。除了在交互式GUI用户会话中,您不能依赖于您自己不创建的映射驱动器号。在脚本或任何远程会话中,只需使用UNC路径即可 - 它更可靠。

2。当您尝试在远程PS会话中映射驱动器时,您遇到了所谓的“双跃点”问题。有一个解决方案,但你需要做额外的设置。见Double hop access to copy files without CredSSP

答案 1 :(得分:1)

alroc's helpful answer很好地解释了问题并指出了通过先前配置解决问题的资源。

用于访问远程会话中的网络共享的 ad hoc解决方案(PSv3 +)

  • 通过变量传递会话凭据;例如,-Credential $cred

  • 使用会话中的凭据 - 例如,$using:cred - 使用New-PSDrive建立映射网络位置的会话范围辅助驱动器。
    映射驱动器后,可以访问目标位置 - 无论是通过驱动器名称,还是直接通过UNC路径。

注意:这是OP他/她自己发现的方法的变体,并在对alroc的答案的评论中进行了简要讨论,除了使用New-PSDrive而不是net use,无需以纯文本格式检索密码。

以下示例代码演示了如何从远程会话中的网络共享运行脚本:

# A sample script to run from a network share on a remote computer.
$script = '\\server-001\install\Install-Agent.ps1'

# A sample target computer.
$computer = 'ws-002'

# Obtain the credentials for the remote session and store them in a variable.
$cred = Get-Credential $env:USERNAME

Invoke-Command -ComputerName $computer -Credential $cred {
  # Map the target network share as a dummy PS drive using the passed-through
  # credentials.
  # You may - but needn't - use this drive; the mere fact of having established
  # a drive with valid credentials makes the network location accessible in the
  # session, even with direct use of UNC paths.
  $null = New-PSDrive -Credential $using:cred dummy -Root (Split-Path -Parent $using:script) -PSProvider FileSystem
  # Invoke the script via its UNC path.
  & $using:script
}

答案 2 :(得分:-2)

您可以尝试通过调用WmiMethod来打开脚本:

$cmd = "CMD.EXE /c *\\\servername\somefolder\yourscript*.cmd" 

Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName *servername*

请注意,这将在服务器上运行脚本。你可以做更多的事情,比如远程安装软件包(在远程机器上本地复制软件包之后)。

希望这有帮助!