Обновление содержимого приложения с помощью Powershell или WMI в Microsoft SCMM 2012 SP1
Щелкнув правой кнопкой мыши тип (ы) развертывания приложений, мы можем выбрать Обновить содержимое. Есть ли способ выполнить это действие, используя Powershell или WMI-метод?
3 ответа
После некоторых интенсивных поисков я нашел решение. В SCCM SDK есть класс WMI под названием 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
}
В настоящее время я использую этот скрипт 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
}
Set-CMDeploymentType с -ContentLocation приведет к принудительному обновлению, даже если для ContentLocation установлено то же значение, что и для оригинала.
Мой код выглядит так:
$app = Get-CMApplication -Name $PackageName
$depType = $app | Get-CMDeploymentType
$depType | Set-CMDeploymentType -MsiOrScriptInstaller -ProductCode $productCode -ContentLocation $PkgRead
Существующее местоположение может быть сложнее определить - если вы еще не знаете, где оно находится, вы можете извлечь его из типа развертывания XML или WMI.