【问题标题】:How to format CCM_UserAffinity output to tyoe Microsoft.PowerShell.Commands.LocalPrincipal如何格式化 CCM_UserAffinity 输出以键入 Microsoft.PowerShell.Commands.Local Principal
【发布时间】:2019-04-23 22:46:03
【问题描述】:

我正在尝试创建一个部署脚本,它将新部署的工作站主要用户添加到本地管理员组。我使用 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:无法绑定参数“成员”。无法转换类型的“Microsoft.PowerShell.Commands.Internal.Format.FormatStartData”值 “Microsoft.PowerShell.Commands.Internal.Format.FormatStartData”键入“Microsoft.PowerShell.Commands.LocalPrincipal”。

【问题讨论】:

    标签: windows powershell sccm


    【解决方案1】:

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

    你可以使用:

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

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

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

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

    【讨论】:

    • 非常感谢!你已经拯救了这一天,当我有足够的分数时,我会回来给你投票。我不太明白你为什么把括号放在里面,但我试着读一下。
    • 备份与数学中的大致相同。他们告诉 ps 首先执行 gt-wmiobject cmdlet 并从结果中获取 consoleuser 属性。这与编写 $temp = Get-WmiObject ... 然后 $PrimaryUser = $temp.ConsoleUser 作为下一行相同。我认为您应该能够将答案标记为已接受(复选标记而不是向上箭头),如果您发现它可以解决您的问题,则不需要更多积分。..
    • 再次感谢,您帮了大忙!
    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多