Задайте вопросЗадайте вопрос
 

Отвечено[PS,AD] Удаление старых компов из домена

  • 8 апреля 2008 г. 4:08Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Написал скриптик такой

    $date=(Get-date).AddYears(-1)
    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 | where {$_.lastlogon -le $date}

    Работает неправильно т.к. выдает что lastlogon пустой, если делаю так

    $date=(Get-date).AddYears(-1)
    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 -Identity "COMP$" | where {$_.lastlogon -le $date}

    то все прокатывает отрабатывает как надо!

    В чем прикол вообще понять не могу.

Ответы

  • 8 апреля 2008 г. 4:33zorion Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Отвечено

    когда смотришь все свойства у всех компов сразу, то там даже нету такой строчки lastlogon

    можно делать так

     

    Code Snippet

    PS:22 > get-qadcomputer zo* | foreach-object {get-qadcomputer $_.name} | format-table name, lastlogon

    Name                                                                            lastLogon
    ----                                                                            ---------
    ZOM                                                                             2008-04-07 6:03:40
    zorion                                                                          2008-04-08 0:33:16

     

     

  • 8 апреля 2008 г. 4:47Vasily GusevMVP, МодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Отвечено

     Alb@ написано:
    Написал скриптик такой

    $date=(Get-date).AddYears(-1)
    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 | where {$_.lastlogon -le $date}

    Работает неправильно т.к. выдает что lastlogon пустой, если делаю так

    $date=(Get-date).AddYears(-1)
    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 -Identity "COMP$" | where {$_.lastlogon -le $date}

    то все прокатывает отрабатывает как надо!

    В чем прикол вообще понять не могу.

    Я тоже сначала никак не врубался в подобную фишку Smile

    Дело в том что Get-QAD* при запросе одного объекта и нескольких, возвращает разные наборы свойств. При запросе нескольких элементов - получаются только "основные", самые популярные, свойства. Если необходимо получить какие то конкретные, их необходимо указать с помощью ключа -IncludedProperties, например:

     

    Code Snippet

    Get-QADComputer -IncludedProperties "LastLogon" | ft name, lastlogon

     

     

Все ответы

  • 8 апреля 2008 г. 4:15Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Вот примеры скриптов

    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 6| Format-table name, lastlogon

    Вывод:

    Name                                                lastlogon
    ----                                                      ---------
    JURBURO
    DMITRIY
    BUCH
    ROMAN
    SERG
    RASHID
     

    Такой скрипт

    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 -Identity "RASHID"|Format-table name, lastlogon

    Вывод:
    Name                                               lastLogon
    ----                                                      ---------
    RASHID                                      09.07.2007 8:57:20



  • 8 апреля 2008 г. 4:33zorion Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Отвечено

    когда смотришь все свойства у всех компов сразу, то там даже нету такой строчки lastlogon

    можно делать так

     

    Code Snippet

    PS:22 > get-qadcomputer zo* | foreach-object {get-qadcomputer $_.name} | format-table name, lastlogon

    Name                                                                            lastLogon
    ----                                                                            ---------
    ZOM                                                                             2008-04-07 6:03:40
    zorion                                                                          2008-04-08 0:33:16

     

     

  • 8 апреля 2008 г. 4:47Vasily GusevMVP, МодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Отвечено

     Alb@ написано:
    Написал скриптик такой

    $date=(Get-date).AddYears(-1)
    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 | where {$_.lastlogon -le $date}

    Работает неправильно т.к. выдает что lastlogon пустой, если делаю так

    $date=(Get-date).AddYears(-1)
    Get-QADComputer -ErrorAction SilentlyContinue -SizeLimit 0 -Identity "COMP$" | where {$_.lastlogon -le $date}

    то все прокатывает отрабатывает как надо!

    В чем прикол вообще понять не могу.

    Я тоже сначала никак не врубался в подобную фишку Smile

    Дело в том что Get-QAD* при запросе одного объекта и нескольких, возвращает разные наборы свойств. При запросе нескольких элементов - получаются только "основные", самые популярные, свойства. Если необходимо получить какие то конкретные, их необходимо указать с помощью ключа -IncludedProperties, например:

     

    Code Snippet

    Get-QADComputer -IncludedProperties "LastLogon" | ft name, lastlogon

     

     

  • 8 апреля 2008 г. 4:59Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    спасибо все работает
  • 8 апреля 2008 г. 5:24Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    теперь хочу сравнить lastlogon с get-date -1 год

     

     

    Code Snippet

    $date=(Get-date).AddYears(-1).Date

    Get-QADComputer -ErrorAction SilentlyContinue -IncludedProperties "Lastlogon" -SizeLimit 10 | Format-table name, lastlogon | where {$_.lastlogon -lt $date}

     

     

    выдает следующее:

    Name                          lastlogon

    ----                          ---------

    JURBURO

    DMITRIY

    BUCH

    ROMAN                    07.04.2008 12:23:53

    SERG                      28.08.2006 7:28:43

    RASHID                    09.07.2007 8:57:20

     

    Я знаю что lt это меньше, т.е 3 < 4 = true

    У меня же не получается

  • 8 апреля 2008 г. 5:32Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    понял свою ошибку скрипт такой

    Code Snippet

    $date=(Get-date).AddYears(-1).Date

    Get-QADComputer -ErrorAction SilentlyContinue -IncludedProperties "Lastlogon" -SizeLimit 10 | where {$_.lastlogon -lt $date} | Format-table name, lastlogon

     

     

     

  • 8 апреля 2008 г. 8:58Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    Чего с трудом продвигаюсь теперь застрял тут

     

    Code Snippet

    $date=(Get-date).AddYears(-1).Date

    Get-QADComputer -ErrorAction SilentlyContinue -IncludedProperties "lastlogon" -SizeLimit 100 -Identity 'pvd-10' |

    where {($_.lastlogon -lt $date) -and ($_.lastlogon -match " ")} |

    Format-list name, lastlogon, CanonicalName |

    Move-QADObject "$_.CanonicalName" -NewParentContainer "ds.local/Computers_old"

     

     

    Шлет такой привет

    Move-QADObject : The input object cannot be bound to any parameters for the command either because the command does not
     take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
    At line:4 char:15
    + Move-QADObject  <<<< "$_.CanonicalName" -NewParentContainer "ds.local/Computers_old"

     

    Если делаю так то все работает

     

    Code Snippet

    $date=(Get-date).AddYears(-1).Date

    $can=Get-QADComputer -ErrorAction SilentlyContinue -IncludedProperties "lastlogon" -SizeLimit 100 -Identity 'pvd-10' |

    where {($_.lastlogon -lt $date) -and ($_.lastlogon -match " ")}

    $can=$can.CanonicalName

    Move-QADObject "$Can" -NewParentContainer "ds.local/Computers_old"

     

     

  • 9 апреля 2008 г. 0:30zorion Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    разглядишь?

    Code Snippet

    PS:14 > Get-QADComputer -ErrorAction silentlycontinue -IncludedProperties "lastlogon" -sizelimit 100 | where {($_.lastlogon -lt $date) -and ($_.lastlogon -match " ")} | foreach-object {Move-QADObject -identity "$_" -NewParentContainer 'lutekad.ru/computers' -WhatIf}


    What if: Moving computer named 'tech3' from OU=SITiS,OU=Lutek,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'SHGT' from OU=SITiS,OU=Lutek,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'TSSSERVER' from OU=Prohodnaya,OU=SITiS,OU=Lutek,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'FAGDF' from OU=DF,OU=Lutek,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'GGI-PRP' from OU=urist,OU=Prp,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'GEGLUR' from OU=PEO_Lur,OU=Lur,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'VAVLURPEO' from OU=PEO_Lur,OU=Lur,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'KVVLUR' from OU=PEO_Lur,OU=Lur,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'FNGOPPR' from OU=oppr_lur,OU=Lur,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    What if: Moving computer named 'kibteplo' from OU=Teplo,OU=Lutek,OU=AllUsers,DC=lutekAD,DC=ru to CN=Computers,DC=lutekAD,DC=ru.
    WARNING: Only first 100 search results were displayed. To display more, increase size limit using -SizeLimit parameter (use 0 as the value of size limit to
    display all search results).

     

     

  • 9 апреля 2008 г. 0:34zorion Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    Делать так уж красиво в одну строку :-)

     

    Code Snippet

    PS:17 > Get-QADComputer -ErrorAction silentlycontinue -IncludedProperties "lastlogon" -sizelimit 100 | where {($_.lastlogon -lt (get-date).addyears(-1).date) -and ($_.lastlogon -match " ")} | foreach-object {Move-QADObject -identity "$_" -NewParentContainer 'lutekad.ru/computers' -WhatIf}

     

     

  • 9 апреля 2008 г. 2:08Vasily GusevMVP, МодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
     Alb@ написано:

    Чего с трудом продвигаюсь теперь застрял тут

    На будущее: Format-* командлеты выдают не оригинальные объекты, а "изуродованные форматированием" Smile Точнее Microsoft.PowerShell.Commands.Internal.Format.*Data. Следовательно любая дальнейшая обработка этих объектов невозможна. Поэтому Format-* командлеты должны стоять в самом конце конвейера (а больше они вобщем то и не нужны нигде Wink ).

  • 9 апреля 2008 г. 5:00Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    все спасибо огросное свою ошибку понял
  • 17 апреля 2008 г. 17:37kpmedia Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
     zorion написано:

    Делать так уж красиво в одну строку :-)

     

    Code Snippet

    PS:17 > Get-QADComputer -ErrorAction silentlycontinue -IncludedProperties "lastlogon" -sizelimit 100 | where {($_.lastlogon -lt (get-date).addyears(-1).date) -and ($_.lastlogon -match " ")} | foreach-object {Move-QADObject -identity "$_" -NewParentContainer 'lutekad.ru/computers' -WhatIf}

     

     

     

    Я тут не вижу учет того, что домен контроллеров несколько. А lastlogon не реплицируется, т.о. "улетят" и нормальные компы

  • 17 апреля 2008 г. 21:41zorion Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    Про домен контроллеров несколько не могу точно сказать и ни кто не смог до сих пор

    Естественно удалять ни чего не нужно, только отключать или переносить.

  • 18 апреля 2008 г. 9:34kpmedia Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
     zorion написано:

    Про домен контроллеров несколько не могу точно сказать и ни кто не смог до сих пор

    Естественно удалять ни чего не нужно, только отключать или переносить.

     

    Я алгоритм сказать могу, просто в power shell пока не силен.

     

    Нужно получить список домен контроллеров, потом с каждого из них получить список компов с атрибутом last logon, затем объединить массивы, затем отбросить n-1 записи для каждого из имен оставив только ту, у которой этот атрибут максимален. Ну а затем уже проводить фильтрацию.

  • 21 апреля 2008 г. 5:46Vasily GusevMVP, МодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     

    http://blogs.technet.com/bahramr/archive/2008/01/25/powershell-script-to-disable-inactive-accounts-in-active-directory.aspx

    Там сразу два варианта решения поставленной задачи (дада, готовые скрипты! Wink ). Первый с LastLogon (который не реплицируется, но зато сообщает точное время), и второй с LastLogonTimestamp (который реплицируется, но обновляется не при каждом логине, а только если прошло "около недели" с момента последнего логина)

  • 10 февраля 2009 г. 22:03Axiles_UA Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     С кодом
    Не хотел создавать новую тему - так как мой вопрос по данной теме, только с вопросом по преобразованию "думаю машинного времени в нормальную дату и время"


    Get-QADComputer -SearchRoot 'домен/Domain Computers' -IncludedProperties 'lastlogontimestamp'| Select-Object Computername, lastlogontimestamp

    В итоге получаем
    ComputerName        lastlogontimestamp
    ------------
    PC-PHOTO08$          128780579119965552

    Где-то помню читал про все выполняемые деления для преобразования данного значения 128780579119965552 в нормальный вид. 

    Может кто-то поможет решить данную проблемму : хотя б по преобразованию этого значения в приемлимый вид (алгоритм)

    Спасибо


     

  • 16 февраля 2009 г. 7:48Alb_ Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
  • 17 февраля 2009 г. 11:34Axiles_UA Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
     Уже разобрался, спасибо за ссылку - её я тоже нашел