某些 Window 个本地组的输出成员资格

Output membership of certain Window local groups

正在编写一个简单的脚本,通过第 3 方系统遍历一堆机器,并将机器、组和用户输出到 PS 对象。

让脚本输出正确的 groups/users。但是,当一个组有多个用户时,它会在同一行而不是换行上呈现它们。只是寻找有关如何正确格式化输出的见解,以便每个结果都在它自己的行上。

  $params = $args
$Target = $args[0]
$PrivUser = "$($params[1])$($params[2])"
$PrivPwd = ConvertTo-SecureString -String $params[3] -AsPlainText -Force
$cred = [pscredential]::new($PrivUser,$PrivPwd)
$Groups =  @('Administrators','Power Users')
$results = @()
try {
    Invoke-Command -ComputerName $Target -Credential $cred -HideComputerName -ScriptBlock {
        $lgs =  Get-LocalGroup -Name $Groups
        Foreach ($lg in $lgs) {
            $ms = Get-LocalGroupMember -Name $lg
            #write-host $ms.Name
            $output = New-Object PSObject -Property @{
                Machine = $env:COMPUTERNAME
                Group = "$lg"
                Username=$ms
            }
            $results += $output
        }
        return $results 
        
    }
 } catch {
    throw "Unable to connect to target: $($args[0]) `n$_"
}

结果:

Username                                                                   Group          Machine   
--------                                                                   -----          -------   
{BLT\clepley, BLT\clepley_admin, BLT\Domain Admins, BLT\svr.blt.div.ss...} Administrators BLT-SS-WEB
BLT\clepley_admin                                                          Power Users    BLT-SS-WEB

似乎你缺少一个内部循环以防成员大于一个:

Invoke-Command -ComputerName $Target -Credential $cred -HideComputerName -ScriptBlock {
    foreach($group in $using:Groups) {
        foreach($member in Get-LocalGroupMember -Name $group) {
            [pscustomobject]@{
                Machine     = $env:COMPUTERNAME
                Group       = $group
                Member      = $member.Name
                ObjectClass = $member.ObjectClass
            }
        }
    }
}

但是请注意,这里没有错误处理,因此,这假设 Power Users 组存在于远程计算机

还值得注意的是 $using: scope modifier 的使用,它允许您在远程范围内访问本地变量 $Groups