Powershell调用命令操作错误

Powershell调用命令操作错误,powershell,Powershell,我被这个问题难住了 我编写了一个powershell脚本,试图使用它跨多个域导入GPO,然后将其与新的gplink链接。我已经确保所有服务器都安装了GP Powershell模块,并且该模块到目前为止运行良好,但是我遇到的问题是,在某些服务器上,我的命令运行正常,在其他服务器上,我收到了错误,在最后一步,我收到了一个操作错误,其中一个调用命令。其他命令与invoke命令(如get service)或我使用的import GPO命令在同一服务器上工作 有关错误: An operations err

我被这个问题难住了

我编写了一个powershell脚本,试图使用它跨多个域导入GPO,然后将其与新的gplink链接。我已经确保所有服务器都安装了GP Powershell模块,并且该模块到目前为止运行良好,但是我遇到的问题是,在某些服务器上,我的命令运行正常,在其他服务器上,我收到了错误,在最后一步,我收到了一个操作错误,其中一个调用命令。其他命令与invoke命令(如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循环中,然后输入到脚本中。我有它,抓取凭证,然后输入。我知道其他一切都在工作,因为我导入GPO的invoke命令工作正常,我运行的所有服务器都成功导入了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

您需要分别使用
-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模拟行为:

$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

该计算机是否是除
domain.com
之外的另一个域的成员?是的,此脚本应用于20多个不同的域。有几个域可以正常工作,但其他域不是。一些域在不同的位置有多个DC,其他域只有一台服务器。域是基于.csv的动态域,因此它将是servername1,10.0.0.10,domain1.com,OU=user,OU=site=DC=domain1,DC=com,下一个类似servername2,10.0.1.10。domain2.com,OU=user,OU=site=DC=domain2,DC=com,第三个可能是。servername3,10.0.1.11,domain2,OU=user,OU=site=DC=domain1,DC=com。我说不出任何真正的区别,在不同的领域之间,或者仅仅是站点之间。嘿,Mathias,不幸的是,你的建议对我不起作用。远程或本地。我尝试在服务器上运行我的命令,并收到以下错误“New GPLink:从服务器返回了引用”。在第1行,char:1+New-GPLink-Name“ReceiveTimeout”-Target“ou=users,ou=site,dc=domain,d…+CategoryInfo:NotSpecified:(:)[New-GPLink],DirectoryServicesCOMException+FullyQualifiedErrorId:System.DirectoryServices.DirectoryServicesCOMException,Microsoft.GroupPolicy.Commands.Ne wglinkcommand“任何建议?”当目录服务器说:“从服务器返回了引用”时,它意味着我不负责您试图在其中进行更改或从中获取数据的分区或域,也不负责与您想要交互的实际域中的DC进行对话“-从中,您可能还需要指定
-Domain
参数,我已经解决了这个问题。我使用了你的第二个命令,拉出了-domainname块,它就像一个符咒。再次感谢!