CM: Функция добавления кода выхода к типу развертывания

Итак, появилась очередная задача — приложение при замене возвращает код, который клиент Configuration Manager не ожидает. В частности, браузер Яндекс возвращает код 3 при обновлении. Чтобы автоматизировать процесс выкладки приложения был написан большой скрипт, который проверяет наличие нового дистрибутива и публикует его в Configuration Manager. При его написании использовались стандартные командлеты. К сожалению, среди них не оказалось командлетов, которые могли бы добавить необходимый код выхода к требуемому типу развертывания. Ниже приведен код функции, которая решает данную проблему:

function Add-CMDeploymentTypeReturnCode
{
    param(
        [Parameter(
            Mandatory = $true,
            Position = 0,
            ValueFromPipeline = $true)]
        [Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlResultObject[]]$DeploymentType,
        [Parameter(
            Mandatory = $true,
            Position = 1)]
        [int]$Value,
        [Parameter(
            Mandatory = $true,
            Position = 2)]
        [Microsoft.ConfigurationManagement.ApplicationManagement.ExitCodeClass]$CodeType,
        [Parameter(
            Mandatory = $false,
            Position = 3)]
        [string]$Name = $null,
        [Parameter(
            Mandatory = $false,
            Position = 4)]
        [string]$Description = $null
    )
    begin
    {
        $ExitCode = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.ExitCode
        $ExitCode.Code = $Value
        $ExitCode.Class = $CodeType
        if (![string]::IsNullOrEmpty($Name))
        {
            $ExitCode.Name = $Name
        }
        if (![string]::IsNullOrEmpty($Description))
        {
            $ExitCode.Description = $Description
        }
    }
    process
    {
        foreach ($Type in $DeploymentType)
        {
            $Application = Get-CMApplication -ModelName $Type.AppModelName
            $UniqueID = $Type.CI_UniqueID
            $ObjectId = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.ObjectId($UniqueID.Split("/"))
            $SDMPackage = [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::DeserializeFromString($Application.SDMPackageXML)
            $SDMPackage.DeploymentTypes[$ObjectId].Installer.ExitCodes.Add($ExitCode)
            $Application.SDMPackageXML = [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::Serialize($SDMPackage, $false)
            $Application.Put()
        }
    }
}

Пример использования функции:

Get-CMApplication -Name "Yandex Browser" | Get-CMDeploymentType | Add-CMDeploymentTypeReturnCode -Value 3 -CodeType Success -Name "Update" -Description "Update"

CM: Поддерживать неподдерживаемое

Итак, у компании появилась потребность в обслуживании рабочих станций на базе UNIX/Linux, при этом в организации уже есть развернутый SCCM, который до недавнего времени поддерживал работу с этим классом операционных систем. Поддержка остановилась на версии Current Branch 1810 и в версии 1902 такой поддержки больше нет. Тем не менее, техническая возможность есть продолжить использовать кроссплатформенные клиенты и в списках операционных систем они никуда не делись. Остаются две проблемы:

  1. В списках нет последних вышедших операционных систем
  2. Установка клиента завершается с ошибкой на неподдерживаемую версию OpenSSL

Для того, чтобы решить первую проблему необходимо  выполнить запрос в базе данных Configuration Manager, который добавит в список отсутствующие операционные системы (в моем примере Debian 9, 10 и Ubuntu 18.04):

INSERT INTO SupportedPlatforms
	(Id, OSPlatform, OSName, OSMinVersion, OSMaxVersion, DisplayText, StringId, Condition, ClientSupported, Metric, BitMask, HybridSupported)
	VALUES
	(4148, 'x86', 'Debian', '9.00.0000.0', '9.99.9999.9999', 'x86 Debian 9', 4148, '<Operator OperatorType="AND"><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_OperatingSystem WHERE Version like ''9%'' AND OSType=36 AND Caption like ''%Debian GNU/Linux 9%'']]></Expression><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_Processor WHERE Architecture=0]]></Expression></Operator>', 1, 200, 0, 0),
	(4149, 'x64', 'Debian', '9.00.0000.0', '9.99.9999.9999', 'x64 Debian 9', 4149, '<Operator OperatorType="AND"><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_OperatingSystem WHERE Version like ''9%'' AND OSType=36 AND Caption like ''%Debian GNU/Linux 9%'']]></Expression><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_Processor WHERE Architecture=9]]></Expression></Operator>', 1, 200, 0, 0),
	(4150, 'x86', 'Ubuntu', '18.04.0000.0', '18.04.9999.9999', 'x86 Ubuntu 18.04', 4150, '<Operator OperatorType="AND"><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_OperatingSystem WHERE Version like ''18.%'' AND OSType=36 AND Caption like ''%Ubuntu 18%'']]></Expression><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_Processor WHERE Architecture=0]]></Expression></Operator>', 1, 200, 0, 0),
	(4151, 'x64', 'Ubuntu', '18.04.0000.0', '18.04.9999.9999', 'x64 Ubuntu 18.04', 4151, '<Operator OperatorType="AND"><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_OperatingSystem WHERE Version like ''18.%'' AND OSType=36 AND Caption like ''%Ubuntu 18%'']]></Expression><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_Processor WHERE Architecture=9]]></Expression></Operator>', 1, 200, 0, 0),
	(4152, 'x86', 'Debian', '10.00.0000.0', '10.99.9999.9999', 'x86 Debian 10', 4152, '<Operator OperatorType="AND"><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_OperatingSystem WHERE Version like ''10%'' AND OSType=36 AND Caption like ''%Debian GNU/Linux 10%'']]></Expression><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_Processor WHERE Architecture=0]]></Expression></Operator>', 1, 200, 0, 0),
	(4153, 'x64', 'Debian', '10.00.0000.0', '10.99.9999.9999', 'x64 Debian 10', 4153, '<Operator OperatorType="AND"><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_OperatingSystem WHERE Version like ''10%'' AND OSType=36 AND Caption like ''%Debian GNU/Linux 10%'']]></Expression><Expression ExpressionType="continuous" ExpressionLanguage="WQL"><![CDATA[SELECT * FROM Win32_Processor WHERE Architecture=9]]></Expression></Operator>', 1, 200, 0, 0)

Для решения второй проблемы необходимо перейти по ссылке Open Management Infrastructure, скачать и установить последнюю версию OMI на компьютер, на который мы хотим установить агент. По ссылке Microsoft System Center Configuration Manager — Clients for Additional Operating Systems необходимо скачать и распаковать клиенты для необходимых операционных систем. В файле install необходимо заменить строку, содержащую запись

OPENSSL_SYSTEM_VERSION_100=

на

OPENSSL_SYSTEM_VERSION_100=`echo $OPENSSL_SYSTEM_VERSION_FULL | grep -Eq '^1.(0|1).'; echo $?`​

, после чего клиент уже можно установить по стандартному сценарию, описанному в документации.

Важно! При использовании данных манипуляций у вас возобновится возможность фильтровать развертывание пакетов как на уровне коллекций, так и на уровне операционной системы клиента. Вы должны отдавать себе отчет в том, что данные действия вы выполняете на свой страх и риск, все описанные действия на момент написания статьи являются неподдерживаемыми.

CM: Cmdlet для создания иконки приложения

Наверняка, многие из тех, кто использует командлеты Configuration Manager, сталкивались с проблемой создания приложения с иконкой размером больше 250×250. При попытке добавить иконку большего размера с помощью командлета New-CMApplication или Set-CMApplication выдается сообщение:

WARNING: The maximum size of an icon is 250px X 250px.

Об этом также есть отзыв на странице UserVoice — New-CMApplication rejects icons larger than 250×250

Ниже приведен командлет, который я использую для добавления иконок большего размера

function New-CMApplicationIcon {
    [OutputType([Microsoft.ConfigurationManagement.ApplicationManagement.Icon])]
    param(
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [System.IO.FileInfo]$FileName
    )
    process {
        [System.Drawing.Image]$Bitmap = $null
        [Microsoft.ConfigurationManagement.ApplicationManagement.Icon]$Icon = $null
        try {
            if ($FileName.Exists) {
                $Bitmap = [System.Drawing.Image]::FromFile($FileName.FullName)
                if ($Bitmap.Height -gt 512 -or $Bitmap.Width -gt 512) {
                    throw "Image size is out of range"
                }
                $Icon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon($Bitmap)
                return $Icon
            }
        }
        finally {
            if ($Bitmap -ne $null) {
                $Bitmap.Dispose()
                $Bitmap = $null
            }
        }
    }
}

Далее мы можем использовать этот командлет совместно с остальными командлетами Configuration Manager, например:

$ApplicationIcon = New-CMApplicationIcon `
    -File ".\Icon\512px-Yandex_Browser_logo.png"
$LanguageId = [System.Globalization.CultureInfo]::GetCultureInfo("ru-ru").LCID
$DisplayInfo = New-CMApplicationDisplayInfo `
    -LanguageId $LanguageId `
    -Title "Яндекс Браузер" `
    -Description "Быстрый и безопасный браузер с голосовым помощником Алисой."
$DisplayInfo.Icon = $ApplicationIcon
$Application = New-CMApplication `
    -Name "Yandex Browser" `
    -Publisher "Yandex" `
    -SoftwareVersion "Latest" `
    -ReleaseDate [DateTime]::Today `
    -AppCatalog $DisplayInfo `
    -DefaultLanguageId $LanguageId

 

System Center 2019

Во всех доступных подписках Microsoft (VLSC, MSDN, Evaluation) стали доступны продукты линейки System Center 2019! Пробные версии продуктов можно скачать по ссылке Evaluate System Center 2019.

CM: Cumulative Update 2 for System Center 2012 Configuration Manager Service Pack 2 and System Center 2012 R2 Configuration Manager Service Pack 1

Вышло второе общее кумулятивное обновление для продуктов линейки Configuration Manager 2012. Как и в случае с сервис паком и первым обновлением его можно установить как на System Center 2012 Configuration Manager SP2, так и на System Center 2012 R2 Configuration Manager SP1. Данное обновление содержит очень большое количество исправлений, с которыми можно ознакомиться на странице https://support.microsoft.com/en-us/kb/3100144. На этой же странице доступна ссылка на загрузку.

CM: Cumulative Update 1 для Configuration Manager 2012 Service Pack 2 и Configuration Manager 2012 R2 Service Pack 1

Сегодня стало доступно кумулятивное обновление для продуктов System Center 2012 Configuration Manager SP2 и System Center 2012 R2 Configuration Manager SP1. Данное обновление не вносит новый функционал, а лишь вносит исправления. Данное обновление также содержит сертификат с новым сроком действия для службы Asset Intelligence. Со списком исправлений можно ознакомиться по ссылке https://support.microsoft.com/en-us/kb/3074857, на этой же странице находится ссылка на загрузку обновления.

CM: Клиенту не удается зарегистрироваться после установки Service Pack 1

После обновления System Center 2012 R2 Configuration Manager до Service Pack 1 обнаружил очень неприятную проблему — клиенты в поле Client Certificate отображали состояние None. Данная проблема исправляется с помощью хотфикса, доступного по ссылке https://support.microsoft.com/en-us/kb/3073015.

CM: Definitions Out Of Date

Недавно произошла проблема на нескольких серверах — консоль Operations Manager показывала, что на нескольких серверах перестали применяться обновления System Center Endpoint Protection, об этом сообщал и сам агент. Попытки обновить сигнатуры антивируса хоть каким либо способом (с помощью кнопки «Обновить», выкачивание сигнатур из интернета) не привели к успеху. В логе Application всегда фигурировала примерно одна и та же запись:

EventType mptelemetry, P1 0x80508007, P2 mpupdateengine, P3 am delta, P4 11.1.5020.0, P5 mpsigstub.exe, P6 4.6.305.0, P7 system center endpoint protection, P8 NIL, P9 NIL, P10 NIL.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

80508007

В логе WindowsUpdate.log также фигурируют записи:

2015-05-31 10:14:42:754  884 1de8 Agent *************
2015-05-31 10:14:42:754  884 1de8 Agent ** START **  Agent: Installing updates [CallerId = CcmExec]
2015-05-31 10:14:42:754  884 1de8 Agent *********
2015-05-31 10:14:42:754  884 1de8 Agent   * Updates to install = 1
2015-05-31 10:14:42:754  884 1de8 Agent   *   Title = Обновление определения для Microsoft Endpoint Protection – БЗ2461484 (Определение 1.199.1341.0)
2015-05-31 10:14:42:754  884 1de8 Agent   *   UpdateId = {206AF401-DDD9-45B3-AAA5-AFFB4B45082D}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *     Bundles 13 updates:
2015-05-31 10:14:42:754  884 1de8 Agent   *       {9ADE0A01-4B9F-47CF-B81F-F0A3D62BDCC9}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {6099CB40-72BD-4CD6-B6F1-EE7E38A66A58}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {BB829F61-F190-4CBE-98B8-B3779B27E5A6}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {1D2DA9A9-D7FD-4DF3-A88D-E0560E32AA41}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {9B948BAB-B715-46BF-9CF5-1A0D9C16BB28}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {17C01696-C668-47FC-9928-84CE30039097}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {6D65585F-98F5-4A60-86C0-E5BCECD5CA46}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {76331A49-BE93-499F-91A9-5CBD255ED8F5}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {2BD89222-EB10-4142-8146-4A56A3ECB4A8}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {4F545BA7-1F9E-4BAD-824A-F19546327CA4}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {61F20F02-FD02-48F7-80EA-3DC741F56093}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {33974DBA-7DEC-4BB2-8F32-8DBB708A47BD}.200
2015-05-31 10:14:42:754  884 1de8 Agent   *       {780C110A-1DCE-4CE8-9F64-0D2D67607B3B}.200
2015-05-31 10:14:42:754  884 1de8 Agent WARNING: LoadLibrary failed for srclient.dll with hr:8007007e
2015-05-31 10:14:43:051  884 1de8 DnldMgr Preparing update for install, updateId = {780C110A-1DCE-4CE8-9F64-0D2D67607B3B}.200.
2015-05-31 10:14:43:098 7856 1f84 Misc ===========  Logging initialized (build: 7.6.7600.256, tz: +0200)  ===========
2015-05-31 10:14:43:098 7856 1f84 Misc   = Process: C:\WINDOWS\system32\wuauclt.exe
2015-05-31 10:14:43:098 7856 1f84 Misc   = Module: C:\WINDOWS\system32\wuaueng.dll
2015-05-31 10:14:43:098 7856 1f84 Handler :::::::::::::
2015-05-31 10:14:43:098 7856 1f84 Handler :: START ::  Handler: Command Line Install
2015-05-31 10:14:43:098 7856 1f84 Handler :::::::::
2015-05-31 10:14:43:098 7856 1f84 Handler   : Updates to install = 1
2015-05-31 10:17:05:584 7856 1f84 Handler   : WARNING: Command line install completed. Return code = 0x80508007, Result = Failed, Reboot required = false
2015-05-31 10:17:05:662 7856 1f84 Handler   : WARNING: Exit code = 0x8024200B
2015-05-31 10:17:05:662 7856 1f84 Handler :::::::::
2015-05-31 10:17:05:662 7856 1f84 Handler ::  END  ::  Handler: Command Line Install
2015-05-31 10:17:05:662 7856 1f84 Handler :::::::::::::

В итоге, было выявлено, что это происходит на 32-битных версиях Windows Server 2003. Смотрим на сайте Microsoft, что поддержка ОС еще не закончена. Ошибка 0x80508007 как бы намекает на то, что недостаточно оперативной памяти, но серверы не используют и половины выделенной им памяти. В чем же проблема?

После того, как поиск не дал результатов было также выявлено, что на всех серверах, где возникает проблема размер файла подкачки выставлен в ручную. После того, как регулирование размера файла подкачки было переключено в автоматический режим и серверы были перезагружены, обновления сигнатур сразу стали устанавливаться. Проблема решена, но причины такого поведения до сих пор не ясны.

CM: System Center 2012 Configuration Manager SP2 и System Center 2012 R2 Configuration Manager SP1

Сегодня вышли Service Pack 1 для System Center 2012 R2 Configuration Manager и Service Pack 2 для System Center 2012 Configuration Manager! Главной особенностью является, конечно же, поддержка новых операционных систем Windows 10. Наряду с этим добавлена возможность построения гибридной архитектуры, когда часть серверов находится в облаке, а другая часть в локальном дата центре. Более подробную информацию можно получить по ссылке.

CM: System Center Configuration Manager Cmdlet Library

Я не придал значения этой новости, но всё же опубликую краткую информацию. В дальнейшем разработчики не планируют добавлять и исправлять функционал PowerShell командлетов посредством обновлений, теперь командлеты будут идти отдельным пакетом. Данный пакет доступен по ссылке https://www.microsoft.com/en-us/download/details.aspx?id=46681, там же находятся и ссылки на документацию. Данную библиотеку командлетов можно установить только для System Center 2012 R2 Configuration Manager с установленным PowerShell 3.0 и выше.