Powershell 来自psObject的两个不同输出

Powershell 来自psObject的两个不同输出,powershell,active-directory,output,domaincontroller,psobject,Powershell,Active Directory,Output,Domaincontroller,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 -Pro

我有以下代码,将编写任何属于或不属于该组的用户:

$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
使用控制台和管道(两个结果的输出)

两者都显示在控制台上,但通过管道的内容与写入主机不同步

这就是为什么事情看起来不正常

通过将结果输送到
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

您的分组结果正确分开

问题是您正在通过
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

但是基于一个psObject的
-match
-notmatch
,您已经有了两个不同的输出:
$results
@Jawad,我知道。但是,当您运行脚本时,您将只获得一个组合输出。这样:但是基于一个psObject的
-match
-notmatch
您已经有了两个不同的输出:
$results
@Jawad我知道。但是,当您运行脚本时,您将只获得一个组合输出。这样说:谢谢你,不知道,还在学习powershell。了解了一些新内容:-)标记为正确答案。请注意,您可以将
输出字符串| Write Host
替换为
输出主机
。主机和管道输出之间缺乏同步仅限于PS v5+和一个非常特定(尽管仍然常见)的场景:未定义格式数据的类型的隐式表格式输出-请参阅。现在只看到您的评论(您没有提到我)-感谢更新。是的,
Out主机
并不广为人知,但它可以方便地向主机发送格式丰富的对象表示。请注意,除了格式化之外,
Write Host
Out Host
之间的另一个重要区别是,在PSv5+中,只有
Write Host
写入信息流,而
Out Host
真正直接写入主机,这意味着无法捕获其输出。谢谢,我不知道,还在学习powershell。了解了一些新内容:-)标记为正确答案。请注意,您可以将
输出字符串| Write Host
替换为
输出主机
。主机和管道输出之间缺乏同步仅限于PS v5+和一个非常特定(尽管仍然常见)的场景:未定义格式数据的类型的隐式表格式输出-请参阅。现在只看到您的评论(您没有提到我)-感谢更新。是的,
Out主机
并不广为人知,但它可以方便地向主机发送格式丰富的对象表示。请注意,除了格式化之外,
Write Host
Out Host
之间的另一个重要区别是,在PSv5+中,只有
Write Host
写入信息流,而
Out Host
真正直接写入主机,这意味着无法捕获其输出。