在 Enter-PSSession 下,PowerShell Set-Location 设置为文件服务器 PermissionDenied

在 Enter-PSSession 下,PowerShell Set-Location 设置为文件服务器 PermissionDenied

在我们公司,我们有一个文件服务器,我想从那里运行脚本来更新远程计算机。

所有计算机都在一个域中。

当我在计算机上执行(PowerShell 是否以管理员身份运行)

Set-Location -Path "\\fileserver.company.org\scripts_folder\"

有用

当我在远程计算机(同一子网)上时,同一用户上述相同的命令有效。

但当我这样做

Enter-PSSession -ComputerName PC-NAME -Credential my_username
Set-Location -Path "\\fileserver.company.org\scripts_folder\"

Set-Location 返回

Set-Location : Access is denied
    + CategoryInfo          : PermissionDenied: (\\fileserver.company.org\scripts_folder\:String) [Set-Location], Unauthoriz
   edAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetLocationCommand

为什么访问被拒绝?当我使用 PowerShell 时,它在哪个用户下运行Enter-PSSession

答案1

对我来说这看起来像double hopsecond hop problem

“第二跳问题”是指如下的情况:

  1. 您已登录到服务器A。
  2. 从 ServerA,启动远程 PowerShell 会话以连接到 ServerB。
  3. 通过 PowerShell 远程会话在 ServerB 上运行的命令尝试访问 ServerC 上的资源。
  4. 对 ServerC 上的资源的访问被拒绝,因为用于创建 PowerShell 远程会话的凭据未从 ServerB 传递到 ServerC。

在您的例子中,您的计算机是 ServerA,您进入会话的计算机是 ServerB,文件服务器是 ServerC

如果您的计算机使用的是 WMF 3.0 或更高版本,您可以创建一个PSSessionConfiguration绑定了凭据的计算机。然后,您可以在 ServerB 上创建远程会话时使用此配置

要创建配置,请在 ServerB 上的提升的 PowerShell 中运行此命令,并使用有权访问 ServerC 上的资源的凭据

Register-PSSessionConfiguration -Name AdminCredConfig -RunAsCredential 'domain\mydomainaccount' -Force

PSSessionConfiguration然后你可以在进入Session时指定创建的

Enter-PSSession -ComputerName ServerB -Credential my_username -ConfigurationName AdminCredConfig
Set-Location -Path "\\fileserver.company.org\scripts_folder\"

在我看来,这是解决你的问题最简单的方法。但是,有多种不同的方法可以解决第二跳问题,例如 CredSSP。你可以在微软文档

对于未使用 WMF 3.0 或更高版本的计算机,您必须在 Invoke-Command 脚本块中传递凭据,这也很容易实现,但不是很优雅,并且需要尴尬的编码。

或者,寻找一种甚至不需要担心第二跳问题的方法。

答案2

我找到了问题的根源。它被称为“第二跳问题”

“第二跳问题”是指如下的情况:

  1. 您已登录到服务器A。

  2. 从 ServerA,启动远程 PowerShell 会话以连接到 ServerB。

  3. 通过 PowerShell 远程会话在 ServerB 上运行的命令尝试访问 ServerC 上的资源。

  4. 对 ServerC 上的资源的访问被拒绝,因为用于创建 PowerShell 远程会话的凭据未从 ServerB 传递到 ServerC。

https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-7

相关内容