windows - 如何将 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”类型。
解决方案
当您计划使用您检索的值而不显示它时,无需使用“格式范围”之类的东西,它只会使输出变得可读,并且是 FormatStartData 数据类型的原因。
您可以使用:
$PrimaryUser = (Get-WmiObject -class CCM_UserAffinity -computername $computer -namespace $namespace).ConsoleUser
它返回一个字符串,由 Add-LocalGroupMember 的 -Member 参数获取
要记住的一件事是,理论上每台机器可以有多个 ConsoleUser。所以 ConsoleUser 可能是一个数组,也可能不是。如果您可以保证每台机器在您的环境中始终只有一个用户(在 ts 运行的地方),您可以按原样使用它。否则,您必须指定要使用的用户,我当然不能告诉您对于您的环境有什么好的规则。
此外,我希望您检查 WMI 类 CCM_UserAffinity 是否已在您要运行此脚本的阶段填充,我无法告诉您是否是这种情况。
推荐阅读
- twisted - Twisted deferred.callback(value) 使用 None 触发回调
- c# - 将凭据传递给 VLC 时,URI 中的密码已弃用
- php - 我的请求是空的?php laravel
- c# - 为什么我的类似休息的路由不起作用?
- vb.net - 获取 FTP 服务器上的文件大小并将其放在标签上
- javascript - 输入给定显式值时无法读取 null 的属性“值”
- android - Android Room:将嵌套对象的字段包含为列
- wcf - AsyncAutoResetEvent 在 WCF 异步方法中不起作用
- commercetools - commercetools 状态机自定义
- php - Composer 需要来自私有包的另一个包导致冲突