如何防止在Powershell foreach中形成多个表?

时间:2018-10-08 09:03:05

标签: powershell

我正在开发一个脚本,该脚本连接到Azure AD,并为任何用户提取失败的登录信息,因此我可能会为用户获得更多信息。 我在foreach中有此代码(部分代码后有任何内容):

$ConvertedOutput  | Select-Object   @{Label="UserId"; Expression={$_.UserId}},
@{Label="CreationTime"; Expression={$_.CreationTime}},
@{Label="UserAgent"; Expression={$FinalOutput[0]."Value"}},
@{Label="Operation"; Expression={$_.Operation}},
@{Label="LogonError"; Expression={$_.LogonError}},
@{Label="ClientIP"; Expression={$_.ClientIP}} | Format-Table

如何防止形成多个表?我只想要该表作为第一条记录,然后是同一表下的其他记录。 谢谢 here is the output

2 个答案:

答案 0 :(得分:0)

# Create an empty array to store your results in
[array]$results = @()

# This is your existing loop
foreach (...) {
    ...
    $ConvertedOutput = <your existing code>
    ...
    # Append your object to the results array
    $results += $ConvertedOutput | Select-Object ... <your existing code>
}

# Now your results object contains all of the values from inside your loop
# So let's display that!
Write-Output $results

答案 1 :(得分:0)

欢迎堆栈溢出。通常,建议您以文本格式而不是图片(只是标题)提供样本(虚假)数据,这使我们更容易回答您的问题。

阅读代码部分,除非您打算进一步扩展它,否则它不会增加太多价值。所有表达式都生成与原始对象相同的键和值,这意味着您可以将其简化为:Select-Object UserId, CreationTime, UserAgent, Operation, LogonError, LogonError, ClientIP甚至:Select-Object *(或者省略完整的Select-Object)。不要选择列子集。

关于您的问题, 默认情况下,PowerShell通常自行连接输出,这意味着可能还有其他原因(您没有共享,例如Write-Host命令)导致数据从管道中初步释放。
让我展示一下由三个单独的CSV列表动态创建的虚拟对象列表:

$Result = &{
ConvertFrom-Csv @'
Id,FirstName,LastName
1,Nancy,Davolio
2,Andrew,Fuller
3,Janet,Leveling
'@

ConvertFrom-Csv @'
Id,FirstName,LastName
4,Margaret,Peacock
5,Steven,Buchanan
6,Michael,Suyama
'@

ConvertFrom-Csv @'
Id,FirstName,LastName
7,Robert,King
8,Laura,Callahan
9,Anne,Dodsworth
'@
}

使用上述命令,$Result包含以下数据:

PS C:\> $Result

Id FirstName LastName
-- --------- --------
1  Nancy     Davolio
2  Andrew    Fuller
3  Janet     Leveling
4  Margaret  Peacock
5  Steven    Buchanan
6  Michael   Suyama
7  Robert    King
8  Laura     Callahan
9  Anne      Dodsworth

这里要提到的重要一件事是,三个列表的列应具有相同的列(或者至少第一行应包含所有预期的列),请参见:Not all properties displayed

如果这不能进一步帮助您,建议您为问题添加更多详细信息。