powershell - CIM、Win32_OperatingSystem 和 Win32ShutdownTracker
问题描述
我正在尝试将一些 PowerShell 代码从使用 WMI 转换为使用 CIM。我有一个使用 Win32ShutdownTracker ( https://msdn.microsoft.com/en-us/windows/desktop/aa394057 ) 重新启动系统的函数,其中包含超时、注释和启动重新启动的原因。使用 WMI,我必须使用“psbase.Scope.Options.EnablePrivileges = $true”为运行重新启动权限的帐户授予权限,即使该帐户已经是本地系统上的管理员。我还没有弄清楚如何使用 CIM 授予相同的权限,似乎没有它们,我无法重新启动系统。此外,类绑定似乎不起作用。任何帮助将不胜感激。
我尝试了许多 CIM 组合,包括获取对象然后调用它并直接调用该类,但没有一个有效。
WMI 代码(正常工作):
$OSObject = Get-WmiObject -Class Win32_OperatingSystem
$OSObject.psbase.Scope.Options.EnablePrivileges = $true
$OSObject.Win32ShutdownTracker(300,"This is a test",2147745794,6)
我试过的 CIM 代码(不起作用):
$OSObject = Get-CimInstance -Class Win32_OperatingSystem
$OSObject.psbase.Scope.Options.EnablePrivileges = $true
在此对象上找不到属性“EnablePrivileges”。验证该属性是否存在并且可以设置。在 line:1 char:1 + $OSObject.psbase.Scope.Options.EnablePrivileges = $true + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound
Invoke-CimMethod -CimClass $OSObject -MethodName Win32ShutdownTracker –Arguments 300,"This is a test",21477
45794,6
Invoke-CimMethod:无法绑定参数“CimClass”。无法将类型“Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem”的“Win32_OperatingSystem:Microsoft Windows 10 Enterprise”值转换为类型“Microsoft.Management.Infrastructure.CimClass”。在 line:1 char:28 + Invoke-CimMethod -CimClass $OSObject -MethodName Win32ShutdownTracker ... + ~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-CimMethod], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage ,Microsoft.Management.Infrastructure.CimCmdlets.Invok eCimMethodCommand
Invoke-CimMethod -CimClass "Win32_OperatingSystem" -MethodName Win32ShutdownTracker –Arguments @{300,"This is a test",2147745794,6}
Invoke-CimMethod -CimClass "Win32_OperatingSystem" -MethodName Win32ShutdownTracker –Arguments @{300,"This
is a test",2147745794,6}
Invoke-CimMethod -CimClass "Win32_OperatingSystem" -MethodName "Win32ShutdownTracker" –Arguments 300,"This
is a test",2147745794,6
Invoke-CimMethod:无法绑定参数“CimClass”。无法将“System.String”类型的“Win32_OperatingSystem”值转换为“Microsoft.Management.Infrastructure.CimClass”类型。在 line:1 char:28 + Invoke-CimMethod -CimClass "Win32_OperatingSystem" -MethodName "Win32 ... + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-CimMethod], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Management.Infrastructure.CimCmdlets.Invok eCimMethodCommand
Invoke-CimMethod -CimClass "Win32_OperatingSystem" -MethodName Win32ShutdownTracker –Arguments 300,"This is
a test",2147745794,6
Invoke-CimMethod:无法绑定参数“CimClass”。无法将“System.String”类型的“Win32_OperatingSystem”值转换为“Microsoft.Management.Infrastructure.CimClass”类型。在 line:1 char:28 + Invoke-CimMethod -CimClass "Win32_OperatingSystem" -MethodName Win32S ... + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument : (:) [Invoke-CimMethod],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.Management.Infrastructure.CimCmdlets.Invok eCimMethodCommand
(Invoke-CimMethod -CimClass 'Win32_OperatingSystem').Win32ShutdownTracker(300,"This is a test",2147745794,6
)
Invoke-CimMethod:无法绑定参数“CimClass”。无法将“System.String”类型的“Win32_OperatingSystem”值转换为“Microsoft.Management.Infrastructure.CimClass”类型。在 line:1 char:29 + (Invoke-CimMethod -CimClass 'Win32_OperatingSystem').Win32ShutdownTra ... + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument:(:) [Invoke-CimMethod],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.Management.Infrastructure.CimCmdlets.Invok eCimMethodCommand
(Invoke-CimMethod -CimClass $OSObject).Win32ShutdownTracker(300,"This is a test",2147745794,6)
Invoke-CimMethod:无法绑定参数“CimClass”。无法将类型“Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem”的“Win32_OperatingSystem:Microsoft Windows 10 Enterprise”值转换为类型“Microsoft.Management.Infrastructure.CimClass”。在 line:1 char:29 + (Invoke-CimMethod -CimClass $OSObject).Win32ShutdownTracker(300,"This ... + ~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-CimMethod] ,ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.Management.Infrastructure.CimCmdlets.Invok eCimMethodCommand
解决方案
这对我有用:
$arguments = @{
Timeout = [System.UInt32]300
Comment = 'This is a test'
ReasonCode = [System.UInt32]2147745794
Flags = 6
}
Invoke-CimMethod -Query 'SELECT * FROM Win32_OperatingSystem' -MethodName 'Win32ShutdownTracker' –Arguments $arguments
推荐阅读
- html - IE11中两个元素之间的导航间隙
- orientdb - Orient DB 3.0.18:名称为“snappy”的压缩不存在
- bash - 在 bash 脚本中使用陷阱后无法使用 awk 打印最后一行
- wpf - 用户控件中的 Mvvm light SimpleIoC
- python-3.x - 使用 xlsxwriter 锁定少数列的数据类型
- javascript - 保存条目不会将引用添加到我的其他文档?
- azure-devops - Azure DevOps 代理池安全性
- r - 如何根据单独列中的启停信息创建值
- excel - 如何为超过 255 的单元格中的单个字符格式化字体
- javascript - 如何在发布/加载网页之前全局应用 Bootstrap 样式类