Powershell Invoke-Command操作错误

时间:2015-03-10 16:58:15

标签: powershell

我被这个问题困扰了。

我编写了一个PowerShell脚本,我试图用它来跨多个域导入GPO,然后将其与new-gplink链接。我已经确保所有服务器都安装了GP Powershell模块并且它到目前为止工作得很好,但是我遇到的问题是在某些服务器上我的命令在我得到的其他服务器上正常工作错误,在最后一步我得到一个操作错误我的一个invoke命令。其他命令使用invoke-command在同一服务器上工作,例如get-service,甚至是我使用的import-GPO命令。

有问题的错误:

An operations error occurred. (Exception from HRESULT: 0x80072020)
    + CategoryInfo          : NotSpecified: (:) [New-GPLink], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.GroupPolicy.Commands.NewGPLinkCommand
    + PSComputerName        : 10.0.0.10

命令:

Invoke-Command -ComputerName $serverip -scriptblock {New-GPLink -Name "GPO" -Target $args[0]} -ArgumentList $oupath -credential $cred

我已经尝试过我能想象到的这个命令的每个版本。如果没有[0],没有参数列表,只需使用服务器ip并用OU路径替换目标,我仍然会得到相同的错误,如下所示。

Invoke-Command -ComputerName $serverip -scriptblock {New-GPLink -Name "GPOName" -Target ou=users,ou=site,ou=domain,dc=server,dc=com} -ArgumentList $oupath -credential $cred

我使用它的方式是带有服务器信息的.csv,它被导入到foreach循环中,然后输入到脚本中。我有它抓取凭据并通过。我知道其他一切正常,因为我的invoke-command导入GPO工作,我运行的所有服务器都成功导入了GPO。我也知道我的OU路径是正确的,因为我在本地使用它们与另一个脚本将计算机放在我想要的地方。 csv中的示例行类似于

servername,10.0.0.10,domain.com,OU = user,OU = site,DC = domain,DC = com

我也在本地运行命令并得到类似的错误:

PS> New-GPLink -Name "GPO" -Target "ou=users,ou=Site,dc=domain,dc=com"
New-GPLink : A referral was returned from the server.
At line:1 char:1
+ New-GPLink -Name "GPO" -Target "ou=users,ou=site,dc=domain,d ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-GPLink], DirectoryServicesCOMException
    + FullyQualifiedErrorId : System.DirectoryServices.DirectoryServicesCOMException,Microsoft.GroupPolicy.Commands.NewGPLinkCommand

如果您有其他问题或需要其他信息,请与我们联系。我完全被这个问题困扰,我感谢您提供的任何帮助。提前谢谢。

编辑:我的所有服务器至少都是2008 R2,并使用的是PowerShell版本3,0,1,1

PS> $psversiontable.psversion

Major  Minor  Build  Revision
-----  -----  -----  --------
3      0      -1     -1

1 个答案:

答案 0 :(得分:0)

您需要分别使用-Domain-Server参数指定尝试应用GPO的域以及相关域中的域控制器:

$OU = "ou=users,ou=Site,dc=domain,dc=com"
New-GPLink -Name "GPO" -Target $OU -Server "domain.com" -Domain "domain.com"

不是仅仅使用域名,正确的方式来实现这一点,实际上是找到一个域控制器,如下所示:

$DC = Get-ADDomainController -Discover -DomainName "domain.com" |Select -ExpandProperty HostName
New-GPLink -Name "GPO" -Target $OU -Server $DC -Domain "domain.tld"

或者在Get-ADDomainController不可用的环境中,您可以使用.NET模拟DCLocator (aka. the underlying high-availability design of AD DS)行为:

$DomainFqdn = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$dctx = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext -ArgumentList "Domain",$DomainFqdn
$DomainController = $[System.DirectoryServices.ActiveDirectory.DomainController]::FindOne($dctx)
New-GPLink -Name "GPO" -Target $OU -Server $DomainController.Name -Domain $DomainFqdn