gpt4 book ai didi

powershell - 将 WMI 调用转换为 CIM 调用

转载 作者:行者123 更新时间:2023-12-05 06:32:20 24 4
gpt4 key购买 nike

我正在编写的代码假设会启动当前可用于使用 CIM 的服务器的任何补丁。由于我的网络需要 DCOM 协议(protocol),我必须使用 CIM。

我使用 ` 以便于查看

以下 wmi 代码有效:

$ComputerName = 'Foo'
[System.Management.ManagementObject[]] $CMMissingUpdates = @(`
Get-WmiObject -ComputerName $ComputerName `
-Query "SELECT * FROM CCM_SoftwareUpdate WHERE ComplianceState = '0'" `
-Namespace "ROOT\ccm\ClientSDK" `
-ErrorAction Stop)
$null = (Get-WmiObject -ComputerName $ComputerName `
-Namespace "root\ccm\ClientSDK" `
-Class "CCM_SoftwareUpdatesManager" `
-List).InstallUpdates($CMMissingUpdates)

我使用 CIM 所做的不起作用:

$null = (Invoke-CimMethod -CimSession $Computer.CimSession `
-Namespace 'ROOT\ccm\ClientSDK' `
-ClassName 'CCM_SoftwareUpdatesManager' `
-MethodName 'InstallUpdates').InstallUpdates($CMMissingUpdates)

我不仅对我的 Invoke-CimMethod 的解决方案感兴趣,而且对它是如何解决的感兴趣。我似乎无法确定如何在 CIM 中查看和实现类的方法。

最佳答案

您的问题是您使用了两个不兼容的命令进行翻译。

Invoke-CimMethod == Invoke-WmiMethod
但是,

Get-WmiObject 不是上述内容。这是完成您正在做的事情的方法:

$ComputerName = 'Foo'
$cimArgs = @{
'Namespace' = 'Root\CCM\ClientSDK'
'ClassName' = 'CCM_SoftwareUpdatesManager'
'MethodName' = 'InstallUpdates' # returns UInt32 object; 0 = success
'Arguments' = @{
'CCMUpdates' = Get-WmiObject -Namespace Root\CCM\ClientSDK -Class CCM_SoftwareUpdate -Filter 'ComplianceState = "0"'
}
'CimSession' = New-CimSession -ComputerName $ComputerName -SessionOption (New-CimSessionOption -Protocol Dcom)
}
Invoke-CimMethod @cimArgs

Invoke-CimMethod cmdlet 使用字典将参数传递给方法。我根据 this documentation 确定了键/值.

这也可以通过以下方式找到:

Get-CimClass -ClassName 'CCM_SoftwareUpdatesManager' -Namespace 'Root\CCM\ClientSDK' |
ForEach-Object -MemberName CimClassMethods

关于powershell - 将 WMI 调用转换为 CIM 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com