我正在开发一个脚本,该脚本连接到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
答案 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
如果这不能进一步帮助您,建议您为问题添加更多详细信息。