none
неправильная $variable.count RRS feed

  • Вопрос

  • делаю аудит компьютерных учётных записей на наличие или отсутствие LAPS пароля:

    $empty = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -eq $null} | ft -AutoSize
    $pass = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -ne $null} | ft -AutoSize
    $empty
    $pass
    $empty.count $pass.count

    результат:

    5
    43

    Но, вывод $empty выдаёт только один компьютер, откуда ещё 4 взялось?

    Вывод $pass выдаёт 39 компьютеров, откуда её 4 взялось?

    всего в OU 40 компьютерных у.з.

    30 июля 2020 г. 10:19

Ответы

  • делаю аудит компьютерных учётных записей на наличие или отсутствие LAPS пароля:

    $empty = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -eq $null} | ft -AutoSize
    $pass = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -ne $null} | ft -AutoSize
    $empty
    $pass
    $empty.count $pass.count

    результат:

    5
    43

    Но, вывод $empty выдаёт только один компьютер, откуда ещё 4 взялось?

    Вывод $pass выдаёт 39 компьютеров, откуда её 4 взялось?

    всего в OU 40 компьютерных у.з.

    ft не подразумевает что что-то будет происходить после него

    попробуйте удалить ft из обеих команд


    The opinion expressed by me is not an official position of Microsoft

    30 июля 2020 г. 10:23
    Модератор
  • базовые типы содержат свойство count (например строки или массивы) но обьекты типа ADObject такого свойства не имеют поэтому если в результате получаете 1 обьект то $var.count не покажет ничего

    Чтоб посчитать сколько фактически обьектов вернулось можно использовать
    ($var | Measure-Object).count


    The opinion expressed by me is not an official position of Microsoft

    30 июля 2020 г. 10:34
    Модератор

Все ответы

  • делаю аудит компьютерных учётных записей на наличие или отсутствие LAPS пароля:

    $empty = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -eq $null} | ft -AutoSize
    $pass = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -ne $null} | ft -AutoSize
    $empty
    $pass
    $empty.count $pass.count

    результат:

    5
    43

    Но, вывод $empty выдаёт только один компьютер, откуда ещё 4 взялось?

    Вывод $pass выдаёт 39 компьютеров, откуда её 4 взялось?

    всего в OU 40 компьютерных у.з.

    ft не подразумевает что что-то будет происходить после него

    попробуйте удалить ft из обеих команд


    The opinion expressed by me is not an official position of Microsoft

    30 июля 2020 г. 10:23
    Модератор
  • я ft использую только для форматирования. Хотя в данном случае это оказалось не критично. Спасибо, не знал.

    Убрал ft, в итоге вторая команда отрабатывает правильно - 39 учётных записей, а вот первая команда теперь ничего не выдаёт, даже 0:

    $empty = get-adcomputer -Filter * -SearchBase "OU=Terminalserver,OU=Servers,DC=domain,DC=local" -Properties * | Select-Object Name,@{ n = "LastLogonDate"; e = {[datetime]::FromFileTime($_.lastLogonTimestamp)}},@{Label="Password";Expression={$_.'ms-Mcs-AdmPwd'}} | where-object {$_.Password -eq $null} $empty $empty.count Name LastLogonDate Password ---- ------------- -------- SRVXXX 26/07/2020 22:37:03


    30 июля 2020 г. 10:29
  • базовые типы содержат свойство count (например строки или массивы) но обьекты типа ADObject такого свойства не имеют поэтому если в результате получаете 1 обьект то $var.count не покажет ничего

    Чтоб посчитать сколько фактически обьектов вернулось можно использовать
    ($var | Measure-Object).count


    The opinion expressed by me is not an official position of Microsoft

    30 июля 2020 г. 10:34
    Модератор
  • поэтому если в результате получаете 1 обьект то $var.count не покажет ничего

    жесть.... Спасибо!
    30 июля 2020 г. 11:09