右键单击应用程序部署类型时,我们可以选择“更新内容”。有没有办法使用 Powershell 或 WMI 方法执行此操作?
答案1
我目前正在使用这个 powershell 脚本来更新所有应用程序的内容,唯一需要注意的是,修订总是会增加:
try
{
Get-Wmiobject -Namespace "root\SMS\Site_<sitecode>" -Class SMS_Application -Filter "isLatest='true' and isExpired='false'" | foreach{
$name = $_.LocalizedDisplayName
echo "Application : $name"
$dptypes = Get-CMDeploymentType -ApplicationName "$name"
foreach ($dpt in $dptypes){
$dptname = $dpt.LocalizedDisplayName
echo "Deployment Type: $dptname"
Update-CMDistributionPoint -ApplicationName "$name" -DeploymentTypeName "$dptname"
}
}
}
catch
{
$_.Exception.Message
}
答案2
带有 -ContentLocation 的 Set-CMDeploymentType 将强制更新,即使 ContentLocation 设置为与原始设置相同。
我的代码如下:
$app = Get-CMApplication -Name $PackageName
$depType = $app | Get-CMDeploymentType
$depType | Set-CMDeploymentType -MsiOrScriptInstaller -ProductCode $productCode -ContentLocation $PkgRead
现有位置可能更难确定 - 如果您还不知道它在哪里,您可以将其从部署类型 XML 或 WMI 中拉出来。
答案3
经过一番深入的搜索,我找到了一个解决方案。在 SCCM SDK 中有一个名为SMS_ContentPackage,它具有公共方法 Commit()。使用这个,我能够更新所有应用程序上的内容,在服务器上使用以下 Powershell 代码:
foreach($application in Get-CMApplication){
$Get_WmiObject = @{
'Namespace' = 'root\SMS\Site_<SiteCode>';
'Class' = 'SMS_ContentPackage';
'Filter' = "PackageID='$($application.PackageId)'";
}
(Get-Wmiobject @Get_WmiObject).Commit() | Out-null
}