Рейтинг:-1

Сервер вернул следующую ошибку: недопустимый контекст перечисления.

флаг cn

Это команда, которую я использую... Может ли кто-нибудь помочь мне в этом...

Get-ADComputer -Filter * -Searchbase "OU=IN0010,OU=BU-L04-Glass,OU=CIN,OU=L00-SGTS-USS,DC=zl,DC=if,DC=atcsg,DC=net" - Недвижимость * | Сортировать LastLogon | Выберите Имя, LastLogonDate,@{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}} | export-csv -path c:\Temp\ADComputer.csv -NoTypeInformation

флаг cn
Сколько компьютеров создает первая команда, и на всех ли они установлен LastLogon?
Рейтинг:1
флаг cn

Давайте красиво разберем это:

  1. LastLogon не реплицируется между контроллерами домена — это уникальная отметка времени для каждого контроллера домена для этой учетной записи. Если компьютер никогда не входил в контроллер домена, к которому обращается ваш запрос, это свойство не будет заполнено. Если он в основном зарегистрирован на разных контроллерах домена, дата может быть неточной. Вместо этого, если вы просто хотите узнать, входили ли компьютеры в систему «недавно», запросите LastLogonTimeStamp или же LastLogonDate - см. примечание ниже.

  2. Если вы хотите понять, что делает запрос, не просто пропускайте его через конвейер и выводите в CSV. Если вам не нравится не понимать, что происходит, и открывать пустой CSV-файл, сначала запустите простые команды, чтобы понять вывод и убедиться, что вы получите правильные результаты, прежде чем выводить их в файл. См. примеры ниже.

  3. Если все, что вам нужно, это LastLogon или же LastLogonDate и имя компьютера, пожалуйста не использовать -Характеристики *. Ваш запрос займет гораздо больше времени, потому что вы буквально перетаскиваете все данные в учетной записи компьютера. Если у вас есть сертификаты, хранящиеся в объектах компьютеров в AD, это могут быть КБ данных для каждого объекта. Если вам нужны только два свойства, просто выберите их: Get-ADComputer -filter '*' -properties Name,LastlogonDate. Пример размеров данных находится в конце.

LastLogonTimeStamp против LastLogonDate

в отличие LastLogon, LastLogonTimeStamp является реплицируется среди всех контроллеров домена, но является точным только до 14 дней назад. LastLogonDate такой же как LastLogonTimeStamp, но это расчет [ДатаВремя] свойство (оно не хранится в LDAP, а вычисляется при запросе). Так как это [ДатаВремя], Легче сортировать и фильтровать.

Если LastLogonTimeStamp 14 дней или меньше, может быть более новый LastLogon для этой машины на одном или нескольких контроллерах домена. Если вам нужно более точное время, вам нужно запросить все контроллеры домена для LastLogon на всех учетных записях компьютеров, а затем сравните, какая из них имеет самую последнюю дату. Но для типичных целей отчетности, например, если вы проверяете учетные записи компьютеров, которые могут быть «устаревшими», LastLogonDate в целом нормально.

Ссылаться на эта статья для получения дополнительной информации.

Понимание результатов запросов AD/LDAP

Если вы не уверены, как выглядят ваши результаты, не выводите их в файл. Чтобы понять, что делают ваши команды, попробуйте простой фильтр и дайте ему вывод на консоль. Затем уточните запрос по мере необходимости. Если вам нужно обработать данные после получения результата, выполняйте один шаг за раз и проверяйте результаты, прежде чем добавлять новые. Я работаю с Powershell уже 15 лет и до сих пор начинаю так: проверяю, что выходит первым, прежде чем делать следующий шаг по фильтрации и обработке данных.

Попробуйте выполнить следующие примеры, явно заменив имена OU и компьютеров на правильные из вашей среды (кстати, не раскрывайте настоящие имена в своих вопросах).

# Список всех компьютеров в OU со свойствами по умолчанию, которые выводит Get-AdComputer - это не включает LastLogonDate и т. д.
# например имя, отличительное имя, включено, объектный тип и т.д... 
Get-ADComputer -Filter * -Searchbase "OU=MyOUPath,DC=example,DC=net"

# Показать -все- свойства компьютера с именем "MyComputer"
Get-ADComputer -Filter 'name -eq "Mycomputer"' -Searchbase "OU=MyOUPath,DC=example,DC=net" -properties *

# Показать только определенные свойства с того же компьютера
Get-ADComputer -Filter 'name -eq "Mycomputer"' -Searchbase "OU=MyOUPath,DC=example,DC=net" -properties Name,LastLogonDate

# Список всех компьютеров в OU с именами и только LastLogonDate
Get-ADComputer -Filter * -Searchbase "OU=MyOUPath,DC=example,DC=net" -properties Name,LastLogonDate

# Как и выше, использование выражения для преобразования нереплицированного свойства LastLogon в [datetime] вместо
# Обратите внимание, что необходима дальнейшая обработка, если вам нужно сравнить эту дату между несколькими контроллерами домена.
Get-ADComputer -Filter * -Searchbase "OU=MyOUPath,DC=example,DC=net" -properties Name,LastLogon | Выберите Имя, LogonDate, @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}}

# Если ваши результаты в предыдущей команде выглядят хорошо, теперь вы можете сортировать и выводить в CSV
Get-ADComputer -Filter * -Searchbase "OU=MyOUPath,DC=example,DC=net" -properties Name,LastLogonDate | Сортировать LastLogonDate | выберите Name, LastLogonDate | export-csv -path c:\Temp\ADComputer.csv -NoTypeInformation

Для последнего примера, Выберите Имя, LastLogonDate заключается в том, чтобы исключить свойства по умолчанию, такие как Выдающееся имя и объектный класс из экспорта CSV. Кроме того, если вам не нравится, как LastLogonDate отформатирован, вам может понадобиться включить выражение для его форматирования и там (аналогично преобразованию Дата входа в систему время файла).

Размер данных запроса LDAP

В приведенном ниже списке файлов показана разница в размере данных, если я верну только имя и LastLogonDate одного компьютера в "comp1.txt" против ВСЕХ свойств одного и того же компьютера в "comp2.txt". Умножьте на количество опрашиваемых машин — очень легко понять, почему запрос будет выполняться намного дольше, когда он перетаскивает ненужные данные из AD и по сети.

Режим LastWriteTime Длина Имя
---- ------------- ------ ----
-a---- 2022-02-14 18:41 894 comp1.txt
-a---- 14-02-2022 18:42 69736 comp2.txt

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.