某些 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
。
正在编写一个简单的脚本,通过第 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
。