首页 > 解决方案 > 将 powershell 的输出连接到对象 id

问题描述

遇到 powershell 命令问题,我正在尝试批量许可一组用户,但我很难让一个命令的输出成为另一个命令的输入,我们将不胜感激

我第一次尝试

Get-MsolUser -All -UnlicensedUsersOnly -City "city name" | ForEach {Set-MsolUserLicense -AddLicenses "Account SKU"}

然后我尝试了

Get-MsolUser -All -UnlicensedUsersOnly -City "City Name" | select-object UserprincipalName | ForEach {Set-MsolUserLicense -Userprincipalname <String> -AddLicenses "Account SKU ID"}

标签: powershellpipe

解决方案


通常,您只需要ForEach-Objectcmdlet(其内置别名为foreach):

  • 对于支持来自管道的直接输入的目标 cmdlet [使用提供的特定对象]

  • 用于在脚本块( { ... })中使用多个表达式或命令自定义处理每个输入对象,其中自动变量$_表示手头的输入对象。

具体来说,在您的情况下,您不需要调用ForEach-Object,尽管您仍然可以使用这样的调用,如 TessellatingHeckler 的回答所示不仅不必要的冗长而且速度明显较慢

Get-MsolUser输出类型的对象[Microsoft.Online.Administration.User],并且Set-MsolUserLicense-UserPrincipalName参数旨在通过它们的.UserPrincipalName属性隐式绑定到此类对象,因此您可以简单地将输出直接通过管道传递到Get-MsolUserSet-MsolUserLicense

Get-MsolUser -All -UnlicensedUsersOnly -City "city name" |
  Set-MsolUserLicense -AddLicenses "Account SKU ID"

推荐阅读