Powershell v3.0pipe道问题

我在使用这个命令时遇到了问题:

gc .\domains.txt | Get-ADDomain 

顾名思义,domains.txt包含要查询的Active Directory列表(所有域都在同一个林中)。

如果我在Windows 8机器上运行它,一切正常,我得到了预期的结果,而不是在Windows 2008 R2 SP1成员服务器(不是DC)与WMF 3.0我得到的结果只能从列表中的第一个域和其他:

 Get-ADDomain : A referral was returned from the server 

如果我查询列表中的域名:

 Get-ADDomain <Domain name here> 

它工作正常。

我的工作站

Microsoft Windows 8 Enterprise(6.2.9200)x64

 PS D:\Tools\Powershell> $PSVersionTable Name Value ---- ----- PSVersion 3.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.18010 BuildVersion 6.2.9200.16384 PSCompatibleVersions {1.0, 2.0, 3.0} PSRemotingProtocolVersion 2.2 

服务器

Microsoft Windows Server 2008 R2标准版SP1(6.1.7601)x64

 PS C:\Tools\Powershell> $PSVersionTable Name Value ---- ----- WSManStackVersion 3.0 PSCompatibleVersions {1.0, 2.0, 3.0} SerializationVersion 1.1.0.1 BuildVersion 6.2.9200.16398 PSVersion 3.0 CLRVersion 4.0.30319.269 PSRemotingProtocolVersion 2.2 

更新

如果我在服务器上运行:

 gc .\domains.txt | %{ Get-ADDomain $_ } 

它运行良好

跟踪

 trace-command -Name ParameterBinding { "DOMAIN_1","DOMAIN_2" | Get-ADDomain } -PSHost 

服务器: http : //pastebin.com/sRVJHaCU

工作站: http : //pastebin.com/kj3JV6nV

提前致谢

我find了一篇可能有帮助的文章。

http://technet.microsoft.com/en-us/library/ee617224.aspx

从脚本的外观来看,您正在使用文本文件提供服务器。 是否有可能问题是您运行PowerShell脚本的Windows 2008服务器不在同一个域中,或者您所login的用户是否无权访问其他服务器是成员的域?

从上面的文章片段:

– 如果指定了Server参数并且未指定Credential参数: – 将域设置为指定服务器的域,并且cmdlet将检查以确保服务器位于LocalComputer或LoggedOnUser的域中。 然后使用当前login用户的凭据来获取域。 当服务器不在LocalComputer或LoggedOnUser的域中时,将返回错误。

您可以尝试为Get-ADDomain命令行添加其他参数,例如-Identity,-AuthType和-Credential

Get-ADDomain [-Identity] [-AuthType {| }] [-Credential] [-Server] []

Powershell v3.0pipe道问题

我只是试图运行cmdlet'gc。\ text.txt | Get-ADDomain'从我拥有的虚拟Server 2008 R2框中。 我使用以下格式构build了一个文本文件:

  Domain1 Domain2 Domain3 

有一点可以肯定的是,每个域都在文本文件中是自己的行。 我可以理解为什么一个语法工作时,你把标准输出到:

 %{ Get-ADDomain $_} 

因为您正在循环访问文本文件中包含的所有信息,并且只能使cmdlet一次处理一个值。 不幸的是,我的Win 8桌面上没有RSAT软件包,所以无法从桌面进行testing。 希望这有一点帮助。