psObject 的两个不同输出
Two different outputs from psObject
我有以下代码,可以写入是否属于该组的任何用户:
$Host.UI.RawUI.WindowTitle = "User Group Finder"
$groupname = Read-Host -Prompt 'Enter group name: '
Write-Host ""
Write-Host "People who are not in this group:" -ForegroundColor Red
$results = @()
$users = Get-ADUser -Properties memberof -Filter *
foreach ($user in $users) {
$groups = $user.memberof -join ';'
$results += New-Object psObject -Property @{'User'=$user.name;'Groups'= $groups}
}
$results | Where-Object { $_.groups -notmatch $groupname } | Select-Object user
Write-Host "People who are in this group:" -ForegroundColor Green
$results | Where-Object { $_.groups -match $groupname } | Select-Object user
当我只想从它获得一个输出时,代码可以正常工作。
但我想要两种不同的输出(在组中的人和不在组中的人)。
目前的问题是它的组合输出。
有什么方法可以从一个 psObject 生成两个不同的输出?
您的小组结果已正确分开。
问题是您正在通过 Write-Host
使用控制台和管道(两个结果的输出)。
两者都显示在控制台上,但通过管道的内容与 Write-Host
不同步
这就是事情看起来乱七八糟的原因。
通过管道将结果发送到主机进行修复 Out-Host
以在与 Write-Host 语句混合时保持顺序。
$results | Where-Object { $_.groups -notmatch $groupname } | Select-Object user | Out-Host
Write-Host "People who are in this group:" -ForegroundColor Green
$results | Where-Object { $_.groups -match $groupname } | Select-Object user | Out-Host
如果要为输出指定不同的颜色,也可以使用 | Out-String | Write-Host
。
我有以下代码,可以写入是否属于该组的任何用户:
$Host.UI.RawUI.WindowTitle = "User Group Finder"
$groupname = Read-Host -Prompt 'Enter group name: '
Write-Host ""
Write-Host "People who are not in this group:" -ForegroundColor Red
$results = @()
$users = Get-ADUser -Properties memberof -Filter *
foreach ($user in $users) {
$groups = $user.memberof -join ';'
$results += New-Object psObject -Property @{'User'=$user.name;'Groups'= $groups}
}
$results | Where-Object { $_.groups -notmatch $groupname } | Select-Object user
Write-Host "People who are in this group:" -ForegroundColor Green
$results | Where-Object { $_.groups -match $groupname } | Select-Object user
当我只想从它获得一个输出时,代码可以正常工作。
但我想要两种不同的输出(在组中的人和不在组中的人)。
目前的问题是它的组合输出。
有什么方法可以从一个 psObject 生成两个不同的输出?
您的小组结果已正确分开。
问题是您正在通过 Write-Host
使用控制台和管道(两个结果的输出)。
两者都显示在控制台上,但通过管道的内容与 Write-Host
这就是事情看起来乱七八糟的原因。
通过管道将结果发送到主机进行修复 Out-Host
以在与 Write-Host 语句混合时保持顺序。
$results | Where-Object { $_.groups -notmatch $groupname } | Select-Object user | Out-Host
Write-Host "People who are in this group:" -ForegroundColor Green
$results | Where-Object { $_.groups -match $groupname } | Select-Object user | Out-Host
如果要为输出指定不同的颜色,也可以使用 | Out-String | Write-Host
。