首页 > 解决方案 > 如何将 CCM_UserAffinity 输出格式化为 tyoe Microsoft.PowerShell.Commands.LocalPrincipal

问题描述

我正在尝试创建一个部署脚本,它将新部署的工作站主要用户添加到本地管理员组。我使用 CCM_userAffinity 类来获取用户名,但是 - Add-LocalGroupMember 不接受它的输出。

我尝试创建任务序列变量以传递给添加到组的 powershell 脚本,但也没有成功。最好将解决方案集成到部署 TS 中,但是由于没有成功,我已恢复为 ps 包部署。

$computer = "LocalHost" 
$namespace = "root\ccm\Policy\Machine" 
$query = "ConsoleUser"
$PrimaryUser = Get-WmiObject -class CCM_UserAffinity -computername $computer -namespace $namespace | select-object $query | format-wide

我希望来自 -class CCM_UserAffinity 的输出被 Add-LocalGroupMember 接受,但是我得到了这个 - Add-LocalGroupMember:无法绑定参数'Member'。无法将“Microsoft.PowerShell.Commands.Internal.Format.FormatStartData”类型的“Microsoft.PowerShell.Commands.Internal.Format.FormatStartData”值转换为“Microsoft.PowerShell.Commands.LocalPrincipal”类型。

标签: windowspowershellsccm

解决方案


当您计划使用您检索的值而不显示它时,无需使用“格式范围”之类的东西,它只会使输出变得可读,并且是 FormatStartData 数据类型的原因。

您可以使用:

$PrimaryUser = (Get-WmiObject -class CCM_UserAffinity -computername $computer -namespace $namespace).ConsoleUser

它返回一个字符串,由 Add-LocalGroupMember 的 -Member 参数获取

要记住的一件事是,理论上每台机器可以有多个 ConsoleUser。所以 ConsoleUser 可能是一个数组,也可能不是。如果您可以保证每台机器在您的环境中始终只有一个用户(在 ts 运行的地方),您可以按原样使用它。否则,您必须指定要使用的用户,我当然不能告诉您对于您的环境有什么好的规则。

此外,我希望您检查 WMI 类 CCM_UserAffinity 是否已在您要运行此脚本的阶段填充,我无法告诉您是否是这种情况。


推荐阅读