Powershell访问被拒绝的问题

时间:2016-12-06 18:43:51

标签: windows powershell invoke-command

我正在尝试从我的域中的计算机下载注册表配置单元,我首先在本地测试一些命令。我有两台机器(VM)不在同一个域:SRV2K12和US-TEST。我可以在两台计算机上成功运行reg.exe save HKLM\SYSTEM \\SRV2K12\Hives\<hostname>(本地主机名在哪里手动输入)。但是,我最终需要远程运行命令,因此我使用的是Invoke-Command。在我的Win 2012服务器上,我可以使用Invoke-Command -computername SRV2K12 -ScriptBlock {reg.exe save HKLM\SYSTEM \\SRV2K12\Hives\<hostname>并按预期工作。在我的Windows 7和Windows 10计算机上,它不起作用。我收到这个错误:

ERROR: Access is denied.
    + CategoryInfo           : NotSpecified: (ERROR: Access id denied.: String) []. RemoteException
    + FullyQualifiedErrorId  : NativeCommandError
    + PSComputerName         : <hostname>
NotSpecified: (:) [], RemoteException

我可以在US-TEST Windows 7机器上运行Invoke-Command -ScriptBlock {reg.exe save HKLM\SYSTEM \\SRV2K12\Hives\US-TEST}就好了,它可以将蜂巢保存到远程计算机上。但是当我添加-computername US-TEST属性(在Win 7或10机器上)时,它告诉我访问被拒绝。

我有什么想法可以让它发挥作用?我已在这些计算机上运行enabled-psremoting -force并成功完成。我也在两台机器上运行Set-item wsman:localhost\client\trustedhosts -value *。没有变化。

1 个答案:

答案 0 :(得分:0)

2-Hop远程处理是你的问题,因为BenH说CredSSP可以解决它,但你可以改变一个小的设计,而不是试图从远程主机进行保存只是将数据返回到你的主叫计算机并做从那里拯救。下面是一种方法,但如果你使用get-itemproperty而不是reg.exe,你可以获得更高的效率并避免使用临时文件。另请注意,当你使用invoke时,这很有可能不起作用 - 命令使用-computername参数定位您正在运行的计算机,需要针对远程计算机调用-computername。

$SB = {
  reg.exe save HKLM\SYSTEM "$($env:TMP)\reg"
  $tempFile = gc "$($env:TMP)\reg"
  return $tempFile
}

$result = Invoke-Command -ScriptBlock $SB -computername COMPUTERNAME
$result | Out-File \\SRV2K12\Hives\US-TEST