【问题标题】:Powershell - last function runs correctly, individually fine,no errors, just incorrect output for the first 2 functionsPowershell - 最后一个函数运行正确,单独正常,没有错误,只是前两个函数的输出不正确
【发布时间】:2020-11-23 14:55:54
【问题描述】:

基本上,这段代码应该通过一个服务器列表,并为每个服务器运行 3 个函数。一种用于列出本地用户,一种用于管理员,一种用于列出 RDP 用户。该脚本似乎单独运行良好,但是当我将它们全部加在一起时,前两个给了我结果,而不是预期的结果。任何想法都会很时髦。我在最后列出了每个函数的内容。

    $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('"')  
     }  
     }

【问题讨论】:

    标签: function powershell foreach


    【解决方案1】:

    预期的输出是什么?当我单独或一起运行这些功能时,它们的工作方式相同。当我运行您的循环时,它也可以正常工作。它显示本地用户、本地管理员和远程桌面用户成员(如果有)

    清理输出

                  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
    

    如果您想简化代码,请参阅我的替代命令建议。这些函数看起来既过时又过于复杂。

    【讨论】:

    • 嗯。好吧,也许我以某种方式搞砸了它。让我做个测试
    • 不应该将“管理员”列为本地用户吗?
    • 你从哪里得到这些功能的?他们严格地拉组,然后根据组成员身份过滤用户。如果管理员是这些组中任何一个组的成员,它就会被列在这三个组中的任何一个中。
    • 我在使用您的命令时收到此错误:Get-LocalGroupMember:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入或输入及其属性不匹配任何接受管道输入的参数。
    • 和:Get-LocalUser:未找到用户用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2012-08-27
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多