Я наткнулся на нечетную ошибку в сценарии PowerShell, который возвращает мне компьютеры в Active Directory в определенных OU (и вспомогательных подразделениях), которые включены и заносятся в журнал в течение определенной даты.Параметр Get-AdComputer -filter не принимает вывод Get-Date
Следующий фрагмент кода делает работу:
$date = (get-date).AddDays(-100)
Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $date)} -Properties lastLogonTimestamp -SearchBase "CN=Computers,DC=some,DC=domain,DC=com"
... однако я сначала попытался сделать это одна строка:
Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $((get-date).AddDays(-100)))} -Properties lastLogonTimestamp -SearchBase "CN=Computers,DC=some,DC=domain,DC=com"
... но я неоднократно получал ошибку ниже (что заставил меня попробовать пример с двумя строками выше):
Get-ADComputer : Cannot process argument because the value of argument "path" is not valid. Change the value of the "path" argument and run the operation again.
At line:1 char:1
+ Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $((ge ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ADComputer], PSArgumentException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.Management.Automation.PSArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
Я запустил сценарий как на Windows 8, так и на Wind ows Server 2008 R2 - как с PowerShell v3. Я предполагаю, что модуль Active Directory, установленный инструментами RSAT, на обеих ОС может быть несколько разными версиями.
Data-wise У меня есть то, что мне нужно, но я в тупике, почему однострочный лайнер не работает. Аргумент «путь» не требуется для командлетов Get-Date или Get-AdComputer, но, как что-то попробовать, я также убедился, что мой рабочий каталог C :.
Мне интересно, может ли кто-нибудь дать представление о том, почему это может быть - я использовал этот тип синтаксиса раньше в командлетах модуля не ActiveDirectory, поэтому я склонен предположить, что, поскольку запрос находится в параметре «фильтр», возможно, это неправильно передается командлету Get-AdComputer (и с этим нам все нужно жить).
У Вас есть ссылку на документацию? «help about_filter» не работает для меня, и Technet ничего не показывает, но я вижу ссылки на него в других сообщениях и статьях (например [about_ActiveDirectory_Filter] (http://technet.microsoft.com/en-us /library/hh531527(v=ws.10).aspx)) –
'Get-Help Get-ADComputer -detailed' показывает [BNF] (http://en.wikipedia.org/wiki/Backus%E2%80% 93Naur_Form) для синтаксиса фильтра. В соответствии с этим компонент фильтра определяется как ' :: = | "(" ")". –
Отлично, это объясняет многое. Цените свое время –