Проблема с Powershell v3.0
У меня возникают проблемы с этой командой:
gc .\domains.txt | Get-ADDomain
Как следует из названия, domain.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 Standard 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
Update
Если я запустил сервер:
gc .\domains.txt | %{ Get-ADDomain $_ }
он отлично работает
TRACE
trace-command -Name ParameterBinding { "DOMAIN_1","DOMAIN_2" | Get-ADDomain } -PSHost
Сервер: http://pastebin.com/sRVJHaCU
Рабочая станция: http://pastebin.com/kj3JV6nV
Заранее спасибо
Ответы
Ответ 1
Я нашел статью, которая может помочь.
http://technet.microsoft.com/en-us/library/ee617224.aspx
Из внешнего вида вашего script вы предоставляете сервер, используя текстовый файл. Возможно ли, что проблема заключается в том, что сервер Windows 2008, на котором работает PowerShell script, находится не в том же домене или у пользователя, у которого вы вошли в систему, поскольку не имеет доступа к доменам, в которых находятся другие серверы?
из вышеприведенной статьи:
-Если параметр Server указан и параметр Credential не указан: - Домен установлен в домен указанного сервера, и командлет проверяет, чтобы сервер находился в домене LocalComputer или LoggedOnUser. Затем учетные данные текущего зарегистрированный пользователь используется для получения домена. Ошибка возвращается, когда сервер не находится в домене LocalComputer или LoggedOnUser.
Вы можете попробовать добавить дополнительные параметры для командлета Get-ADDomain, такие как -Identity, -AuthType и -Credential
Get-ADDomain [-Identity] [-AuthType {| }] [-Credential] [-Server] []
Ответ 2
Проблема с Powershell v3.0
Я просто попытался запустить командлет gc.\text.txt | Get-ADDomain 'из окна виртуального сервера 2008 R2, который у меня есть. Я построил текстовый файл в следующем формате:
Domain1
Domain2
Domain3
Единственное, что нужно знать, это то, что каждый домен находится в собственной строке в текстовом файле. Я могу понять, почему один синтаксис работал, когда вы передавали STDOUT в:
%{ Get-ADDomain $_}
потому что вы перебираете всю информацию, содержащуюся в текстовом файле, и выполняете только команду cmdlet за одно значение за раз. К сожалению, у меня нет пакета RSAT на рабочем столе Win 8, поэтому я не могу проверить его на рабочем столе. Надеюсь, это немного поможет.