PowerShell - Управление компьютерами в AD

Аватара пользователя
Неадекват

PowerShell - Управление компьютерами в 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

Re: PowerShell - Управление компьютерами в AD

Сообщение Kazun »

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.



PowerShell - Включение отключение учетных записей




5.



Get-ADComputer -Filter "whenChanged -ge '$wcdate' -and lastlogon -ge '$lldate' -and Enabled -eq $false" | Remove-ADComputer -Confirm:$false
Аватара пользователя
Неадекват

Re: PowerShell - Управление компьютерами в AD

Сообщение Неадекват »

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

Re: PowerShell - Управление компьютерами в AD

Сообщение ratibor79 »

Как вариант.

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



Get-ADComputer -filter "Passwordlastset -lt '1/11/2013'" -properties * | Select name, passwordlastset
Аватара пользователя
Неадекват

Re: PowerShell - Управление компьютерами в AD

Сообщение Неадекват »

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

Re: PowerShell - Управление компьютерами в AD

Сообщение Неадекват »

Kazun, приветствую!

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

Re: PowerShell - Управление компьютерами в AD

Сообщение Kazun »

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

Re: PowerShell - Управление компьютерами в AD

Сообщение Kazun »

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

Re: PowerShell - Управление компьютерами в AD

Сообщение Kazun »

Код:

Код: Выделить всё

$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
Аватара пользователя
Неадекват

Re: PowerShell - Управление компьютерами в AD

Сообщение Неадекват »

Цитата Неадекват:



Kazun, а вы не просвятите что такое -ge и что это выражение делает?
PowerShell - Управление компьютерами в AD




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

Вернуться в «Скриптовые языки администрирования Windows»