Powershell v3.0管道问题

Powershell v3.0管道问题,powershell,active-directory,powershell-3.0,Powershell,Active Directory,Powershell 3.0,我在执行此命令时遇到问题: gc .\domains.txt | Get-ADDomain 顾名思义,domains.txt包含要查询的Active Directory列表(所有域都在同一个林中) 如果我在Windows 8计算机上运行它,一切正常,我会得到预期的结果,而在使用WMF 3.0的Windows 2008 R2 SP1成员服务器(不是DC)上,我只会从列表中的第一个域中得到结果,对于其他域: Get-ADDomain : A referral was returned from t

我在执行此命令时遇到问题:

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

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

Get-ADDomain : A referral was returned from the server
如果我使用以下命令查询列表中的域:

Get-ADDomain <Domain name here>
服务器 Microsoft Windows Server 2008 R2标准SP1(6.1.7601)x64

更新 如果我在服务器上运行:

gc .\domains.txt | %{ Get-ADDomain $_ }
它运行良好

痕迹 服务器:

工作站:

提前感谢

我刚刚尝试从我拥有的虚拟服务器2008 R2框中运行cmdlet“gc.\text.txt | Get ADDomain”。我以以下格式构建了一个文本文件:

 Domain1
 Domain2
 Domain3
需要确保的一点是,每个域都位于文本文件中自己的行上。我能理解为什么当您将STDOUT传输到以下位置时,一种语法起作用:

%{ Get-ADDomain $_} 

因为您正在循环浏览文本文件中包含的所有信息,并且每次仅让cmdlet处理单个值。不幸的是,我的Win 8桌面上没有RSAT软件包,因此无法从桌面进行测试。希望这能有所帮助。

我找到了一篇可能有用的文章

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

上述文章的片段:

-如果指定了服务器参数而未指定凭据参数: --域设置为指定服务器的域,cmdlet将检查以确保服务器位于指定服务器的域中 本地计算机或LoggedOnUser。然后是当前用户的凭据 已登录的用户用于获取域。当 服务器不在本地计算机或LoggedOnUser的域中

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

获取ADDomain[-Identity][-AuthType{| }][-凭证][服务器] []


第一个域(它在Server 2008 R2中工作)是该服务器所属的域吗?否,该服务器所属的域返回错误(使用管道)。是否仔细检查文本文件(行尾没有特殊字符,unicode/ansi不匹配)?尝试使用Trace命令查看参数绑定是如何失败的,例如,
Trace命令-Name ParameterBinding{gc.\domains.txt | Get ADDomain}-PSHost
Trace from server:Trace from workstation:ActiveDirectory模块似乎在服务器上出现错误。实际上,这两台机器指向不同的DNS;我将尝试使用相同的DNS服务器。您是对的,服务器已加入一个域,我正在尝试获取林中其他域的信息,但我仍然无法理解为什么gc.\domains.txt |%{get ADDomain$|}可以工作,而gc.\domains.txt | get ADDomain不能工作。
trace-command -Name ParameterBinding { "DOMAIN_1","DOMAIN_2" | Get-ADDomain } -PSHost
 Domain1
 Domain2
 Domain3
%{ Get-ADDomain $_}