Powershell - последняя функция работает правильно, индивидуально нормально, без ошибок, только неправильный вывод для первых 2 функций - PullRequest
0 голосов
/ 03 августа 2020

В основном этот код должен go через список серверов и для каждого сервера запускать 3 функции. один для вывода списка локальных пользователей, один для администраторов и один для вывода списка пользователей RDP. Кажется, что сценарий работает нормально по отдельности, но когда я складываю их все вместе, первые два дают мне результаты, а не ожидаемые результаты. Любые идеи были бы groovy. Я перечислил содержимое каждой функции в конце.

    $ServerList = Get-Content "ServerList.txt"

    foreach ($i in $ServerList){

    write-host ("                                                   ",$i)
    write-host "     
                  Local Users
    "
    get-local $i
    write-host "     
                  Administrator Users
    "
    get-localadmin $i
    write-host "
                  RDP Users
    "
    get-rdp $i
     }
     write-host "                                                                   COMPLETED"

     function get-local {  
     param ($strcomputer)  

     $admins = Gwmi win32_groupuser –computer $strcomputer   
     $admins = $admins |? {$_.groupcomponent –like '*"users"'}  

     $admins |% {  
     $_.partcomponent –match “.+Domain\=(.+)\,Name\=(.+)$” > $nul  
     $matches[1].trim('"') + “\” + $matches[2].trim('"')  
     }  
     }

     function get-localadmin {  
     param ($strcomputer)  

     $admins = Gwmi win32_groupuser –computer $strcomputer   
     $admins = $admins |? {$_.groupcomponent –like '*"Administrators"'}  

     $admins |% {  
     $_.partcomponent –match “.+Domain\=(.+)\,Name\=(.+)$” > $nul  
     $matches[1].trim('"') + “\” + $matches[2].trim('"')  
     }  
     }

     function get-rdp {  
     param ($strcomputer)  

     $admins = Gwmi win32_groupuser –computer $strcomputer   
     $admins = $admins |? {$_.groupcomponent –like '*"Remote Desktop Users"'}  

     $admins |% {  
     $_.partcomponent –match “.+Domain\=(.+)\,Name\=(.+)$” > $nul  
     $matches[1].trim('"') + “\” + $matches[2].trim('"')  
     }  
     }

1 Ответ

0 голосов
/ 03 августа 2020

Каков ожидаемый результат? Когда я запускаю функции по отдельности или вместе, они работают одинаково. Когда пробегаю через твой l oop, тоже нормально работает. Он показывает локальных пользователей, локальных администраторов и пользователей удаленных рабочих столов (если есть)

Очищенный вывод

              Local Users

PC1\INTERACTIVE
PC1\Authenticated Users
PC1\Domain Users
PC1\test
 
              Administrator Users

PC1\Administrator
PC1\someuser
DOMAIN\Domain Admins
DOMAIN\doug

              RDP Users

PC1\test

Если вы просто хотите перечислить локальных пользователей, вы можете использовать

Get-LocalUser 

Для локального администратора вы можете использовать

Get-LocalGroup "administrators" | Get-LocalGroupMember

Для пользователей RDP

Get-LocalGroup "Remote Desktop Users" | Get-LocalGroupMember

Изменить: чтобы ответить на вопрос «не следует» администратору » быть в списке локальных пользователей? " из вашего комментария. Нет. Функция Get-Local извлекает членов локальной группы «Пользователи». Тот же список создается при запуске

Get-LocalGroup Users | Get-LocalGroupMember

См. Мою альтернативную рекомендацию по командам, если вы хотите упростить свой код. Функции кажутся устаревшими и слишком сложными.

...