Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Управление компьютерами в AD (http://forum.oszone.net/showthread.php?t=280959)

Неадекват 16-04-2014 12:28 2338821

Управление компьютерами в AD
 
Приветствую и прошу совета у местных гуру скриптовых языков.
Ситуация такова. Есть домен, в котором много компов разного "срока годности". Я задался целью отыскать такие компы и решил использовать для этого Powershell. Так как в нем я не силен вовсе, то путем гугления нашел и состряпал такую команду:

Get-ADComputer -LDAPFilter "(operatingsystem=*windows*)" -SearchBase "dc=domain_name,dc=ru" -Properties Name, IPv4Address, whenchanged, operatingsystem, lastlogondate, canonicalname, OperatingSystemServicePack | Out-GridView

Потом я сортирую в открывшемся окне от GridView компы по атрибутам whenchanged и lastlogondate, задавая нужное мне условие по срокам, ОС и пр. Команда в принципе рабочая, но ее результаты требуют еще доп усилий для приведения в нужный мне вид.

Что хотелось бы получить:
1. Выгрузку из AD только тех ПК, которые удовлетворяют условиям по параметрам whenchanged и lastlogondate (или какой-нибудь универсальный вариант чтобы я сам мог менять);
2. Выгрузку из AD сразу в файл SCV/XLSX/пр. желательно с шапкой;
3. Возможность выгрузить только имена ПК в файл TXT;
4. Возможность отключать/включать учетные записи ПК, которые получены выгрузкой выше или внесенные в файл руками;
5. Возможность удалять ПК, которые удовлетворяют условиям по параметрам whenchanged и lastlogondate и enabled.

Буду еще благодарен за ссылки на ресурсы, на которых можно найти какие-нибудь другие крутые и забойные скрипты Powershell для работы с AD.

Kazun 16-04-2014 13:05 2338847

1.

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-90)
$lldate = (Get-Date).AddDays(-90).ToFileTime()
$users = Get-ADUser -Filter "whenChanged -ge '$wcdate' -and lastlogon -ge '$lldate'"

2.

$users | Export-Csv result.csv -NoTypeInformation -Encoding UTF8

3.

Get-ADComputer -Filter * | Foreach {$_.Name} | Out-File result.txt

4.

http://forum.oszone.net/thread-280936.html

5.

Get-ADComputer -Filter "whenChanged -ge '$wcdate' -and lastlogon -ge '$lldate' -and Enabled -eq $false" | Remove-ADComputer -Confirm:$false

ratibor79 16-04-2014 14:30 2338909

Как вариант.
Поиск устаревших компьютеров по параметру Passwordlastset (когда последний раз менялся пароль)

Get-ADComputer -filter "Passwordlastset -lt '1/11/2013'" -properties * | Select name, passwordlastset

Неадекват 17-04-2014 09:00 2339241

Kazun, подскажите, пожалуйста, как этим пользоваться? Я открыл Windows PowerShell ISE, скопировал все строки из п. 1 и нажал F5. Что дальше?

Неадекват 13-08-2014 12:00 2388663

Kazun, приветствую!
Ваш скрипт, к сожалению, не делает того, что должен. Он а) выгружает пользователей, а не ПК и б) он выгружает что угодно, но не компы, которые по указанным параметрам старше заданного числа дней.

Kazun 13-08-2014 12:19 2388671

См. пункт 5,там ответ на а и на б. -ge - условие заменить на свое.

Неадекват 13-08-2014 15:20 2388761

Kazun, вот, что я запускаю у себя после изменений:

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-28)
$lldate = (Get-Date).AddDays(-28).ToFileTime()
$users = Get-ADComputer -Filter "whenChanged -ge '$wcdate' -and lastlogon -ge '$lldate'"
Get-ADComputer -Filter "whenChanged -ge '$wcdate' -and lastlogon -ge '$lldate'" | Out-GridView

В итоге получаю неправильный список компов. Хочу получить список ПК с несерверными Windows и атрибутами whenChanged и lastlogondate более 28 дней. Где у меня ошибка? Я понимаю, что вопросы тупые, но я не силен в PS.

Kazun 13-08-2014 15:57 2388775

Код:

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-28)
$lldate = (Get-Date).AddDays(-28).ToFileTime()
Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogon -lt '$lldate' -and OperatingSystem -notlike '*Server*'" | Out-GridView


Неадекват 13-08-2014 16:34 2388795

Kazun, а вы не просвятите что такое -ge и что это выражение делает? Вы заменили его на -lt, а что делает оно? Я попробовал загуглить, но гугл не сознается, вероятно я неправильно спрашиваю.

Iska 13-08-2014 16:42 2388798

Цитата:

Цитата Неадекват
Kazun, а вы не просвятите что такое -ge и что это выражение делает? »

Это не выражение. Это оператор. «Greater than or Equal» — больше, либо равно.

Неадекват 13-08-2014 16:49 2388799

Iska, а почему тогда нельзя сразу задать значение? Зачем нужны переменные $wcdate и $lldate?

Iska 13-08-2014 16:51 2388801

Цитата:

Цитата Неадекват
Я попробовал загуглить, но гугл не сознается, вероятно я неправильно спрашиваю. »

Надо взять «-ge» в кавычки: powershell "-ge" - Поиск в Google, иначе это будет оператор отрицания для поиска google.

Той Серью 19-08-2022 14:32 2990730

Ищу, ищу, никак не найду, что означают whenChanged. Это значение всегда более позднее, чем LastLogOn .
Три компьютера, которые отобрались по критерию даты (также искал те, которые не работают больше 8 дней, почему-то безопасникам восемь дней понравились), так вот они пропинговались, то есть в данный момент в сети.

DJ Mogarych 19-08-2022 19:37 2990744

WhenChanged is an attribute in Microsoft Active Directory and is the date when this object was last changed.

Собственно, то и означает - когда объект был изменён.



http://www.selfadsi.org/user-attributes-w2k12.htm


Время: 10:54.

Время: 10:54.
© OSzone.net 2001-