从列表中调用 CIMMethod - SCCM 应用程序安装

问题描述 投票:0回答:1

我使用下面的方法从软件中心为最终用户在非强制应用程序上延迟安装 SCCM 应用程序,但是在尝试跨多台计算机执行此操作时它不起作用:

$computer = Get-Content -Path c:\temp\computers.txt
foreach ($computer in $computers) {

$appName = 'AppNameHere'

$Application = (Get-CimInstance -ClassName CCM_Application -Namespace "root\ccm\clientSDK" -ComputerName $computer | Where-Object {$_.Name -like $AppName})

$Args = @{EnforcePreference = [UINT32] 0
Id = "$($Application.id)"
IsMachineTarget = $Application.IsMachineTarget
IsRebootIfNeeded = $False
Priority = 'High'
Revision = "$($Application.Revision)" }

$Instance = @(Get-CimInstance -ClassName CCM_Application -Namespace "root\ccm\clientSDK" -ComputerName $Computer | Where-Object {$_.Name -like $AppName})
Invoke-CimMethod -Namespace ROOT\ccm\ClientSDK -ClassName CCM_Application -ComputerName $computer -MethodName Install -Arguments $Args | ft -AutoSize



}

如果我删除 foreach,它将从列表中获取计算机,但仅当 .txt 包含一台计算机时才进行处理。按照目前的情况,它将正常运行,但不会执行任何操作,也不会产生任何输出。感觉我错过了一些非常明显的东西。

我确实尝试使用 Invoke-Command 调用上述内容,但它返回了许多 WS 错误 - 我认为我们不需要使用 Invoke-CimMethod 调用它?

将不胜感激任何帮助 - 谢谢大家。

powershell sccm
1个回答
0
投票

我知道这篇文章已经很旧了,我希望您现在已经找到答案。但是,如果没有,这里有一些希望应该有所帮助的东西。

您必须确保 PowerShell 理解它需要一个数组,而不仅仅是一个字符串。

尝试更改以下行 $computer = Get-Content -Path c: em

© www.soinside.com 2019 - 2024. All rights reserved.