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

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

Неадекват 28-11-2014 11:20 2436813

Управление компьютерами в AD ч. 2
 
Приветствую экспертов! :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 2436822

Код:

$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 2436827

Kazun, спасибо, буду пробовать.

Iska 28-11-2014 11:56 2436830

Цитата:

Цитата Неадекват
в другую группу в домене »

Цитата:

Цитата Неадекват
-TargetPath 'ou=charlotte,dc=iammred,dc=net' »

«OU» — это никак не «группы».

Неадекват 28-11-2014 11:57 2436832

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

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

Kazun 28-11-2014 12:23 2436844

Заменить 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 2436852

Kazun, спасибо, теперь буду тестировать.

Неадекват 28-11-2014 13:38 2436886

Поменял скрипт немного и он перестал работать. Я где-то ошибся, но не пойму где именно.

$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 2436888

CanonicalName -notlike '*srv*'" -Нельзя использовать, поэтому удалить.

Неадекват 28-11-2014 13:53 2436892

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

Kazun 28-11-2014 13:56 2436895

В фильтр с like distinguishedname нельзя использовать.

Код:

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

Неадекват 28-11-2014 14:47 2436919

Kazun, спасибо, теперь все работает.

Неадекват 04-12-2014 08:31 2439402

: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 2439416

Заменить Where {$_.distinguishedname -notlike '*srv*'} на :
Код:

Where {$_.distinguishedname -notlike '*srv*' -or $_.distinguishedname -notlike '*Inactive_Computers*'}

Неадекват 04-12-2014 09:36 2439420

Kazun, спасибо, протестирую.

Неадекват 04-12-2014 10:48 2439445

После редактирования и запуска сценария стало все еще хуже и непонятней. Запускаю сценарий:
Код:

$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 2439455

Get-ADComputer ..... -Properties ProtectedFromAccidentalDeletion

Неадекват 04-12-2014 11:18 2439459

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

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

Неадекват 04-12-2014 14:22 2439558

Попробовал в скрипте убрать перенос чтобы он просто вывел машины-кандидаты, но все равно не работает.

Kazun 04-12-2014 14:44 2439573

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

Код:

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

Неадекват 04-12-2014 15:11 2439583

Kazun, тысяча извинений, но я действительно не понял сперва ваше сообщение. Потом гугл мне подсказал и я понял что надо сделать.

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

А теперь другая проблема - как заставить сценарий игнорировать ошибки? Я дописал в конце команду, которую нагуглил...
Код:

-PassThru -ea Continue | Out-GridView
...но все равно ошибки появляются плюс окно от команды Out-GridView не появляется. Т.е. непонятно это потому что нечего выводить или потому что ошибки?

Iska 04-12-2014 17:34 2439690

Цитата:

Цитата Неадекват
...но все равно ошибки появляются »

Разумеется. about_CommonParameters:
Скрытый текст
Цитата:

Код:

    -ErrorAction[:{Continue | Ignore | Inquire | SilentlyContinue | Stop |
        Suspend }] 
        Alias: ea

        Determines how the cmdlet responds to a non-terminating error
        from the command. This parameter works only when the command generates
        a non-terminating error, such as those from the Write-Error cmdlet.

        The ErrorAction parameter overrides the value of the
        $ErrorActionPreference variable for the current command.
        Because the default value of the $ErrorActionPreference variable
        is Continue, error messages are displayed and execution continues
        unless you use the ErrorAction parameter.

        The ErrorAction parameter has no effect on terminating errors (such as
        missing data, parameters that are not valid, or insufficient
        permissions) that prevent a command from completing successfully.

        Valid values:

            Continue. Displays the error message and continues executing
            the command. "Continue" is the default value.

            Ignore.  Suppresses the error message and continues
            executing the command. Unlike SilentlyContinue, Ignore
            does not add the error message to the $Error automatic
            variable. The Ignore value is introduced in Windows
            PowerShell 3.0.

            Inquire. Displays the error message and prompts you for
            confirmation before continuing execution. This value is rarely
            used.

            SilentlyContinue. Suppresses the error message and continues
            executing the command.

            Stop. Displays the error message and stops executing the
            command.

            Suspend. This value is only available in Windows PowerShell workflows.
            When a workflow runs into terminating error, this action preference
            automatically suspends the job to allow for further investigation. After
            investigation, the workflow can be resumed.



Неадекват 04-12-2014 17:38 2439695

Iska, гм... Ну ладно, с появлением ошибок понятно. Но почему последний командлет не выполняется и ничего такого ISE не говорит - вот это мне непонятно.


Время: 12:29.

Время: 12:29.
© OSzone.net 2001-