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: 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 SP1 Cumulative Update 5

Как я и писал в одной из недавних записей о скором выходе Cumulative Update 5. Вот он и вышел! Статья, а также само обновление находятся по ссылке — http://support.microsoft.com/kb/2978017.

CM: Еще раз о членстве локальных групп

Давным-давно я (да и не только я) уже писал о том, как можно получить отчет по членам локальных групп. Сегодня, поковырявшись с WMI и оглядываясь назад, решил, что код выглядит достаточно некрасиво, да и сам по себе класс имеет некоторые недостатки. Так, например, если членом локальной группы будет локальный и доменный пользователь с одним и тем же именем, то объект создастся лишь для одной записи. В общем-то сам по себе скрипт поменялся не сильно, а вот класс Win32_LocalGroupMember, если вы уже его использовали, придется пересоздать, т.к. теперь ключевыми свойствами является SID группы и SID учетной записи, что даст абсолютную уникальность каждому объекту в WMI. Также по данному классу теперь можно узнать, является ли пользователь локальным или доменным (MemberLocalAccount), а также SID данного пользователя (MemberSID).

Собственно, сам скрипт:

Set oWMI = GetObject("winmgmts:root\cimv2")
iCimtypeString = 8
iCimtypeBoolean = 11

sClassName = "Win32_LocalGroupMember"
sLocalGroupQuery = "SELECT Domain, Name, SID FROM Win32_Group WHERE LocalAccount=TRUE"
sComputerSystemQuery = "SELECT DomainRole FROM Win32_ComputerSystem"

For Each oSubclass in oWMI.SubclassesOf()
    If oSubclass.Path_.Class = sClassName then oWMI.Get(sClassName).Delete_
Next

Set oClass = oWMI.Get()
oClass.Path_.Class = sClassName
Call oClass.Properties_.add("MemberName", iCimtypeString)
Call oClass.Properties_.add("MemberDomain", iCimtypeString)
Call oClass.Properties_.add("MemberType", iCimtypeString)
Call oClass.Properties_.add("MemberLocalAccount", iCimtypeBoolean)
Call oClass.Properties_.add("MemberSID", iCimtypeString)
Call oClass.Properties_.add("GroupName", iCimtypeString)
Call oClass.Properties_.add("GroupDomain", iCimtypeString)
Call oClass.Properties_.add("GroupSID", iCimtypeString)
Call oClass.Properties_("GroupSID").Qualifiers_.add("key", True)
Call oClass.Properties_("MemberSID").Qualifiers_.add("key", True)
Call oClass.Put_()

Set oClass = oWMI.Get(sClassName).SpawnInstance_

For Each oGroup in oWMI.ExecQuery(sLocalGroupQuery)
	sAssociatorsQuery = "ASSOCIATORS OF {Win32_Group.Domain='"&oGroup.Domain&"',Name='"&oGroup.Name&"'} WHERE Role=GroupComponent"
	For Each oAccount in oWMI.ExecQuery(sAssociatorsQuery)
		oClass.MemberName = oAccount.Name
		oClass.MemberDomain = oAccount.Domain
		oClass.MemberSID = oAccount.SID
		oClass.MemberType = Replace((oAccount.Path_.Class), "Win32_", "")
		oClass.MemberLocalAccount = oAccount.LocalAccount
		oClass.GroupName = oGroup.Name
		oClass.GroupDomain = oGroup.Domain
		oClass.GroupSID = oGroup.SID
		Call oClass.Put_()
	Next
Next

И сам MOF:

//**************************************************************************
//* Class: Win32_LocalGroupMember
//**************************************************************************
 
[ SMS_Report     (TRUE),
  SMS_Group_Name ("Local Group Member"),
  SMS_Class_ID   ("CUSTOM|LocalGroupMember|1.0") ]
class Win32_LocalGroupMember : SMS_Class_Template
{
    [SMS_Report (TRUE)      ] string MemberName;
    [SMS_Report (TRUE)      ] string MemberDomain;
    [SMS_Report (TRUE), key ] string MemberSID;
    [SMS_Report (TRUE)      ] string MemberType;
    [SMS_Report (TRUE)      ] boolean MemberLocalAccount;
    [SMS_Report (TRUE)      ] string GroupName;
    [SMS_Report (TRUE)      ] string GroupDomain;
    [SMS_Report (TRUE), key ] string GroupSID;
};

О том, как опубликовать и использовать в отчетах данный пример можно прочитать в предыдущей статье о членстве групп, все имена свойств класса остались прежними.
Во вложении к статье можно скачать сам скрипт и MOF файл. Не забудьте поменять расширение на .zip.

CM: Прощай, Configuration Manager 2007!

Вчера, 08.07.2014 был последний день поддержки линейки продуктов System Center Configuration Manager 2007, включая релизы R2 и R3. В любом случае, до 09.07.2019 продолжает действовать расширенная поддержка. А всем остальным, кто еще не успел мигрировать на новую линейку ConfigMgr, рекомендую сделать это в ближайшее время, тем более, что на Technet Virtual Labs можно протестировать миграцию на уже готовых виртуальных машинах.

Если оглянуться назад, то давайте рассмотрим, что нам принес в свое время Configuration Manager 2007:

  • Native Mode — в свое время мало кто понимал зачем он нужен и зачем столько возни с сертификатами. Но именно с помощью него у администраторов появилась возможность управлять компьютерами за пределами внутренней сети;
  • Out-of-band Management… или проще говоря, работа и поддержка c Intel AMT;
  • Поддержка WSUS! Те, кто застал времена SMS 2003 помнят, что обновления приходилось распространять как пакеты;
  • После выхода R2 появилась возможность использовать службу SQL Server Reporting Services вместо службы отчетов SCCM 2007, которая была написана на ASP. В свое время было очень много проблем с этой службой из-за переходов на 64-битные платформы;
  • Также с выходом R2 появилась возможность устанавливать операционные системы на неизвестные компьютеры. До этого приходилось использовать интеграцию с MDT 2007;
  • Клиент поддерживал все современные операционные системы, включая Windows 8.1 (с некоторыми оговорками);
  • С выходом релиза R3 появилась возможность управлять электропитанием (правда, для России данный функционал был не востребован).

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

CM: System Center 2012 R2 Configuration Manager Cumulative Update 2

Вышло второе кумулятивное обновление для System Center 2012 R2 Configuration Manager.

KB2970177 —  Описание и загрузка кумулятивного обновления 2 для Configuration Manager 2012 R2.

KB2962855 — Описание изменений в наборе командлетов Powershell в Cumulative Update 2.

KB2976481 — Описание изменений для кроссплатформенных клиентов Cumulative Update 2. Сами клиенты можно скачать по прежней ссылке — http://www.microsoft.com/en-my/download/details.aspx?id=39360.

В скором времени будет выпущен релиз Cumulative Update 5 для System Center 2012 R2 Configuration Manager Service Pack 1.

 

CM: System Center 2012 R2 Configuration Manager Maintenance Window bug

Коллегами в компании был обнаружен баг с окнами обслуживания в System Center 2012 R2 Configuration Manager. Баг заключается в следующем, если окно обслуживания считается не по локальному времени, а по Гринвичу (Coordinated Universal Time (UTC)) и окно обслуживания по локальному времени переходит на следующие сутки, то день недели в данном случае не переходит и считается по установленной галочке в окне обслуживания. Пример:
Окно обслуживания запланировано по Гринвичу на Вторник, 20:00 и заканчивается 21:30, соответственно, локальное время для Москвы (+04:00) это Среда, с 00:00 по 01:30. По факту данное окно будет применено во Вторник с 00:00 по 01:30.
По неподтвержденным данным данный баг отсутствует в окнах обслуживания с применением для «All Deployment Types».

CM: System Center 2012 R2 Configuration Manager Cumulative Update 1

Вышел первый накопительный пакет для ConfigMgr 2012 R2! Я постараюсь перечислить лишь основные исправления и дополнения, которые включены в Cumulative Update 1:

  • Наконец-то исправлен баг с кнопкой Uninstall при создании нескольких Deployment Type в приложении;
  • Исправлена ошибка с распознаванием съемных носителей в WinPE. Раньше, при установке ОС и наличии USB-носителя можно было получить следующую ошибку:

Booted from fixed disk
!sVolumeID.empty(), HRESULT=80004005 (e:\qfe\nts\sms\framework\tscore\resolvesource.cpp,465)
!sVolumeID.empty(), HRESULT=80004005 (e:\qfe\nts\sms\framework\tscore\resolvesource.cpp,465)
!sTSMDataPath.empty(), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\resolvesource.cpp,1425)
TS::Utility::GetTSMDataPath(rsPath), HRESULT=80070002 (e:\qfe\nts\sms\client\tasksequence\bootshell\configpath.cpp,352)
Failed to find the current TS configuration path
ConfigPath::FindConfigPath(sConfigPath), HRESULT=80070002 (e:\qfe\nts\sms\client\tasksequence\bootshell\bootshell.cpp,545)
Failed to find the configuration path.
The system cannot find the file specified. (Error: 80070002; Source: Windows)
Execution failed with error 80070002.

  • Обновился клиент System Center Endpoint Protection;
  • Исправлена ошибка с Automatic Deployment Rules. Раньше, если для аутентификации на прокси-сервере в настройках указывалась учетная запись, загрузка заканчивалась ошибкой;
  • Добавлены и изменены некоторые командлеты PowerShell — KB2932274;

Это лишь часть основных изменений, полный список, а также загрузить пакет можно по ссылке — http://support.microsoft.com/kb/2938441.

CM: Hotfix KB2910552

Вышел hotfix для System Center 2012 R2 Configuration Manager. Данная заплатка устраняет проблему с запуском последовательности задач переустановки ОС на Windows XP. При попытке запуска в логе smsts.log возникает следующая ошибка:

Installing boot image to hard drive TSManager datetime 3048 (0x0BE8)
Backing up existing boot system before trying to set up new boot system TSManager datetime 3048 (0x0BE8)
BootLoader::backup: C:\, C:\_SMSTaskSequence\backup TSManager datetime 3048 (0x0BE8)
BootLoader::restore: C:\_SMSTaskSequence\WinPE, C:\ TSManager datetime 3048 (0x0BE8)
Saving bcd store to C:\_SMSTaskSequence\WinPE\boot\BCD TSManager datetime 3048 (0x0BE8)
Executing command line: «C:\_SMSTaskSequence\WinPE\SMS\bin\i386\bootsect.exe» /NT60 SYS /MBR TSManager datetime 3048 (0x0BE8)
CreateProcess failed. Code(0x800700C1) TSManager datetime 3048 (0x0BE8)
Command line execution failed (800700C1) TSManager datetime 3048 (0x0BE8)
Failed to install boot image.
is not a valid Win32 application. (Error: 800700C1; Source: Windows) TSManager datetime 3048 (0x0BE8)
Failed to install boot image CCR00004.
is not a valid Win32 application. (Error: 800700C1; Source: Windows) TSManager datetime 3048 (0x0BE8)
Failed to reboot the system. Error 0x(800700c1) TSManager datetime 3048 (0x0BE8)
Failed to initialize a system reboot.
is not a valid Win32 application. (Error: 800700C1; Source: Windows) TSManager datetime 3048 (0x0BE8)
Fatal error is returned in check for reboot request of the action (Restart in Windows PE).
is not a valid Win32 application. (Error: 800700C1; Source: Windows) TSManager datetime 3048 (0x0BE8)

Данный hotfix заменяет KB2905002.

Скачать заплатку можно по ссылке — http://support.microsoft.com/kb/2910552/en-us.

CM: Известные ошибки Configuration Manager 2012 R2

Продукт вышел относительно недавно, но ряд пользователей уже столкнулся с ошибками в ConfigMgr 2012 R2. Кто-то смог их избежать, используя обходные решения, кто-то живет с ними и по сей день, а кто-то просто дальше продолжает работать с ConfigMgr 2012 Sp1. Итак, ниже приведу список ошибок:

  • Медленная загрузка внутри WinPE. Решается установкой хотфикса;
  • Сбой службы WDS, установленной на сайт-сервере. Решается установкой хотфикса;
  • Отсутствие кнопки Uninstall в приложениях с двумя и более Deployment Type. Решения нет. Решается установкой CU1;
  • Не работают переменные последовательностей задач, назначенные на устройство. Есть скрипт, который можно запросить у Microsoft. Данный скрипт забирает данные напрямую из БД и создает локальные переменные. Решается установкой хотфикса;
  • Установка клиента может вызвать перезагрузку операционной системы. Решения нет, подробнее можно прочитать тут;
  • После обновления могут создаться копии стандартных отчетов, начинающиеся с двух нижних подчеркиваний «__». Если вы не вносили собственные изменения в данные отчеты, то их можно удалить;
  • Созданные условия для приложений могут не работать после обновления. Решение довольно простое — необходимо внести какое нибудь изменение (например, комментарий), чтобы пересоздать условие;
  • Невозможно обновить ConfigMgr 2012 Sp1 CU2+ до ConfigMgr 2012 R2 если используется Pull Distribution Point. Поддерживаемого решения пока нет, подробнее можно прочитать тут;
  • После обновления могут перестать работать отчеты. Подробнее об ошибке и обходном решении можно прочитать тут;
  • После обновления учетная запись Network Access Account пропадает. Связано это с тем, что в ConfigMgr 2012 R2 можно использовать несколько Network Access Account. Необходимо просто пересоздать учетную запись.
  • Offline обновление образов ОС в ConfigMgr 2012 R2 может занять бОльше времени, чем ConfigMgr 2012 Sp1. Связано это с долгим копированием образа в папку локального диска сайт-сервера.
  • Окна обслуживания, использующие время по Гринвичу, не переходят на следующие сутки. Подробнее можно прочитать тут.

См. также:

Подробнее о планировании обновления ConfigMgr 2012 Sp1 до ConfigMgr 2012 R2 можно прочитать тут — http://technet.microsoft.com/en-us/library/jj822981.aspx.