如何将参数沿管道传递给不接受管道输入的函数?

时间:2021-03-16 16:25:57

标签: powershell microsoft-teams skype-for-business

我有一个包含用户身份列表的文本文件。我想将该列表中的每个成员传递给 Get-csMeetingMigrationStatus 并取回 UserPrincipalName、Status 和 LastMessage。从那里我想输出到 gridview 作为对迁移状态测试的关注。

我想在一个管道中执行此操作,但无法解决。我知道 Get-csMeetingMigrationStatus 不会为其参数 -identity 获取管道输入,因此我必须使用另一种方法将该参数传递给函数。我以前做过这样的事情,我想知道用户列表是从文本文件导入而不是从头创建的数组这一事实是否是原因。

我需要尽快让它工作,所以我想我只是把它放在一个 foreach 循环中,如下所示。我知道下面的示例并没有给我所有我想要的问候输出,但即使下面的示例也失败了。

$UserDetails = Get-Content -path c:\test.txt
foreach ($ud in $UserDetails) {
        Get-csMeetingMigrationStatus -identity $ud | Select-Object Userprincipalname, status, lastmessage
}

当我在上面运行时,第一个身份的返回是我的 connect-microsoftteams 连接的属性标头。 随后的迭代返回一个空行。对于 foreach 循环的每次迭代,如果我将 foreach 语句中的命令复制并粘贴到终端窗口中并运行它,则会显示每个用户的正确信息。我不明白怎么会这样。

最终,我想将所有这些推送到单个管道并输出到 gridview。

如果有人可以帮助解决上述任一问题,我将不胜感激,因为我已经尝试对其进行了很多小时的排序,但找不到解决方案。

谢谢

1 个答案:

答案 0 :(得分:3)

使用 ForEach-Object cmdlet

Get-Content -path c:\test.txt |ForEach-Object {
    Get-CsMeetingMigrationStatus -identity $_ | Select-Object Userprincipalname, status, lastmessage
} |Out-GridView

将管道嵌套在 ForEach-Object 中意味着我们可以提供另一个下游 cmdlet(在本例中为 Out-GridView)及其产生的任何输出(与 foreach(){} 循环语句不同)< /p>