首页 > 解决方案 > 使用一个查询的结果作为命令的参数(在单行上)

问题描述

从 PowerShell 管理 AzureAD、Exchange Online、Teams 等,我喜欢将单行代码保存在稍后调用的文本文件中,但有时,当我只知道对象的名称时,这些命令需要对象 ID。

例如,cmdletAdd-TeamUser允许我将用户添加到团队组。但是,当我想提供名称时,它需要组 ID。我可以通过以下方式从名称中获取组 ID:

Get-Team | Where-Object {$_.DisplayName -eq "Produce Sales"} | select GroupId

输出(部分模糊):

在此处输入图像描述

是否可以使用该查询内联Add-TeamUser?就像是:

Add-TeamUser -GroupId {the-above-query} -User someone@somewhere.com

标签: powershell

解决方案


很可能,cmdletAdd-TeamUser接受管道输入。Id 运行 aGet-Help Add-TeamUser -Full以查看它接受什么类型的值,以便您可以通过管道传递给它。或者,您可以将值分配给变量并将其发送到下一个命令。在这种情况下,我们有一个值数组,我们遍历每个值,只获取 ID,然后通过 ID 添加它们:

$ListOfNames = @("Produce Sales","Shoe Sales", "ETC")
    Foreach($name in $ListOfNames){
        $GroupID = Get-Team | Where-Object {$_.DisplayName -eq "$name"} | Select-Object -ExpandProperty GroupId
            Add-TeamUser -GroupId $GroupID -User someone@somewhere.com
                        }

另一种使用方法是将其传递给foreach-objectcmdlet,让它为您从管道中获取值。它也可以在上面的示例代码中使用:

Get-Team | Where-Object {$_.DisplayName -eq "Produce Sales"} | Select-Object -ExpandProperty GroupId | ForEach-Object -Process{
     Add-TeamUser -GroupId $_ -User someone@somewhere.com}               

推荐阅读