PDA

Показать полную графическую версию : Управление компьютерами в AD ч. 2


Страниц : [1] 2

Неадекват
28-11-2014, 11:20
Приветствую экспертов! :bow:
В моем предыдущем топике (http://forum.oszone.net/thread-280959.html) я спрашивал о том как получить компы, которые удовлетворяют определенным условиям и получил варианты решения.
Теперь же встала другая задача. Требуется компы, которые нашлись по скрипту ниже, переместить в другой контейнер в домене и еще деактивировать (отключить учетную запись).

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-28)
$lldate = (Get-Date).AddDays(-28).ToFileTime()
Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogondate -lt '$lldate' -and OperatingSystem -notlike '*Server*'" -Properties Name, IPv4Address, whenchanged, operatingsystem, lastlogondate, canonicalname, OperatingSystemServicePack | Out-GridView


Я порылся в инете и нашел примеры как перемещать (пример ниже)...

get-adcomputer win7-c1 | Move-ADObject -TargetPath 'ou=charlotte,dc=iammred,dc=net'


...и как отключать (скрипт ниже)

$then = (Get-Date).AddDays(-60) # The 60 is the number of days from today since the last logon.
Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false


Но у меня не хватает опыта и ума их объединить. Я так понимаю, что надо как-то синтаксически правильно связать. Кто поможет с этим?

Kazun
28-11-2014, 11:46
$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-28)
$lldate = (Get-Date).AddDays(-28).ToFileTime()
Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogondate -lt '$lldate' -and OperatingSystem -notlike '*Server*'" |
Set-ADComputer -Enabled $false -PassThru | Move-ADObject -TargetPath 'ou=charlotte,dc=iammred,dc=net'

Неадекват
28-11-2014, 11:55
Kazun, спасибо, буду пробовать.

Iska
28-11-2014, 11:56
в другую группу в домене »
-TargetPath 'ou=charlotte,dc=iammred,dc=net' »
«OU» — это никак не «группы».

Неадекват
28-11-2014, 11:57
Неадекват, попутный вопрос - а можно как-то еще в конце получить вывод в gridview того, что он переместил и отключил? Или там просто надо добавить out-gridview?

Iska, да, я не то слово написал, пардон. Не группа, а контейнер, конечно же.

Kazun
28-11-2014, 12:23
Заменить Move-ADObject -TargetPath 'ou=charlotte,dc=iammred,dc=net' на:
Move-ADObject -TargetPath 'ou=charlotte,dc=iammred,dc=net' -PassThru | Out-GridView

Неадекват
28-11-2014, 12:29
Kazun, спасибо, теперь буду тестировать.

Неадекват
28-11-2014, 13:38
Поменял скрипт немного и он перестал работать. Я где-то ошибся, но не пойму где именно.

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-372)
$lldate = (Get-Date).AddDays(-372).ToFileTime()
Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogondate -lt '$lldate' -and OperatingSystem -notlike '*Server*' -and CanonicalName -notlike '*srv*'" -Properties Name, IPv4Address, whenchanged, operatingsystem, lastlogondate, canonicalname, OperatingSystemServicePack | Out-GridView

Kazun
28-11-2014, 13:45
CanonicalName -notlike '*srv*'" -Нельзя использовать, поэтому удалить.

Неадекват
28-11-2014, 13:53
Kazun, я подозревал что-то подобное... А почему нельзя и как тогда мне сделать фильтр по имени контейнера? Использовать distinguished name можно?

Kazun
28-11-2014, 13:56
В фильтр с like distinguishedname нельзя использовать.

Get-ADUser ... | Where {$_.distinguishedname -notlike '*srv*'} | Out-GridView

Неадекват
28-11-2014, 14:47
Kazun, спасибо, теперь все работает.

Неадекват
04-12-2014, 08:31
:bow:
Приветствую снова экспертов. Помогите, пожалуйста, с корректировкой кода

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-31)
$lldate = (Get-Date).AddDays(-31).ToFileTime()
Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogondate -lt '$lldate' -and OperatingSystem -notlike '*Server*'" | Where {$_.distinguishedname -notlike '*srv*'} | Set-ADComputer -Enabled $false -PassThru | Move-ADObject -TargetPath 'ou=Inactive_Computers,dc=domain,dc=ru' -PassThru | Out-GridView


Хочу добавить туда еще такую команду: Where {$_.distinguishedname -notlike '*Inactive_Computers*'}, но не знаю как ее синтаксически объединить с предыдущей чтобы оба условия выполнялись по логическому AND.

Kazun
04-12-2014, 09:24
Заменить Where {$_.distinguishedname -notlike '*srv*'} на :
Where {$_.distinguishedname -notlike '*srv*' -or $_.distinguishedname -notlike '*Inactive_Computers*'}

Неадекват
04-12-2014, 09:36
Kazun, спасибо, протестирую.

Неадекват
04-12-2014, 10:48
После редактирования и запуска сценария стало все еще хуже и непонятней. Запускаю сценарий:

$wcdate = "{0:yyyMMddHHmmss}.Z" -f (Get-Date).AddDays(-31)
$lldate = (Get-Date).AddDays(-31).ToFileTime()
Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogondate -lt '$lldate' -and OperatingSystem -notlike '*Server*'" | Where {$_.distinguishedname -notlike '*srv*' -and $_.distinguishedname -notlike '*Inactive_Computers*' -and $_.ProtectedFromAccidentalDeletion -eq $false} | Set-ADComputer -Enabled $false -PassThru | Move-ADObject -TargetPath 'ou=Inactive_Computers,dc=domain,dc=ru' -PassThru | Out-GridView


И сценарий ничего не выдает. Ни ошибок ни уведомлений. В чем может быть проблема?

Kazun
04-12-2014, 11:08
Get-ADComputer ..... -Properties ProtectedFromAccidentalDeletion

Неадекват
04-12-2014, 11:18
Kazun, Я не очень понял ваше сообщение. Мне надо эту строку добавить в конце или в ней ошибка или я неправильно что-то написал?

Суть в том, чтобы скрипт не трогал объекты, защищенные от удаления. Если убрать это требование, то скрипт запинается и останавливает свою работу на таких объектах.

Неадекват
04-12-2014, 14:22
Попробовал в скрипте убрать перенос чтобы он просто вывел машины-кандидаты, но все равно не работает.

Kazun
04-12-2014, 14:44
Я иногда в замешательстве, что добавление -Properties ProtectedFromAccidentalDeletion может вызвать такие проблемы:

Get-ADComputer -Filter "whenChanged -lt '$wcdate' -and lastlogondate -lt '$lldate' -and OperatingSystem -notlike '*Server*'" -Properties ProtectedFromAccidentalDeletion




© OSzone.net 2001-2012