SUP: Skype for Windows

В продуктах появилась новая программа для обновлений — Skype for Windows. Ни для кого не секрет, что Скайп был выкуплен компанией Майкрософт, так что больше не будет необходимости создавать вручную обновления через SCUP. Единственное, что удручает, — это включенный в дистрибутив Bing Bar. С обновлением можно ознакомиться здесь — http://support.microsoft.com/kb/2692954.
Skype for Windows

OSD: «Склеивание» WIM файлов

Решил написать совсем небольшой скрипт, который склеивает WIM-файлы из определенной директории в один WIM-файл. Для работы скрипта требуется Windows AIK, а точнее утилита ImageX.
Merge-WimFile.ps1:

Param (
	[Parameter(mandatory = $true)][string]$Path,
	[Parameter(mandatory = $true)][string]$Destination,
	[Parameter(mandatory = $false)][string]$Filter
)

$Imagex = "$env:ProgramFiles\Windows AIK\Tools\$env:processor_architecture\Imagex.exe"
$WimFiles = Get-ChildItem -Path $Path -Filter $Filter
if (Test-Path $Imagex) {
	foreach ($WimFile in $WimFiles) {
		&$Imagex /Export $WimFile.fullname 1 $Destination ($WimFile.Name -replace $WimFile.Extension)
	}
}
else {
	Write-Error "ImageX.exe not found."
}

В данном скрипте необходимо задать параметры -Path — путь до директории с WIM-файлами и -Destination — путь до WIM-файла, в который будут сохраняться все образы. Можно также задать параметр -Filter, в котором можно задать маску файлов для склеивания. Склеивание образа имеет существенный плюс — размер. В WIM образ файлы попадают в единственном числе и если какой либо файл уже есть в WIM-файле, то на него просто будет создана ссылка.

Вот демонстрация того, сколько у меня занимают семь образов по отдельности:

Splited Files
Files before

А вот размер одного WIM-файла, который содержит в себе эти же самые семь образов:
Image Before

Вот как выглядит склеенный загруженный образ в Configuration Manager:
Image in ConfigMgr

Если Вы обратили внимание, то скрипт написан так, что он присваивает к имени образа имя файла. Но у склеенного образа есть и обратная сторона — если образы сильно отличаются друг от друга, то размер файла будет довольно большим, а преимущества никакого не будет и также, в случае, когда контент загружается на локальный диск с точки распространения, а не запускается напрямую с нее, то время на доставку уйдет больше. Выбирать Вам!

MP: Windows Server Operating System Management Pack

Две недели назад вышла новая версия (6.0.6972.0) пакетов управления для операционной системы Windows Server.

Страница загрузки: http://www.microsoft.com/en-us/download/details.aspx?id=9296.

MP: Exchange Server 2010 Monitoring Management Pack

Вышла новая версия (14.3.38.2) пакета управления для Microsoft Exchange 2010.
Страница загрузки: http://www.microsoft.com/en-us/download/details.aspx?id=692.
Данный пакет управления временно недоступен из-за наличия ошибок!

http://blogs.technet.com/b/exchange/archive/2012/06/28/mailboxes-on-a-database-are-quarantined-in-an-environment-with-system-center-operations-manager.aspx

SUP: Для тех, кто не любит ждать

Совсем небольшой скрипт для тех случаев, когда ОС нужно обновить, но по какой-то причине установка обновлений не прошла в процессе OSD. Процесс обновления в Configuration Manager требует большего времени, нежели установка обновлений через WSUS, поэтому это наиболее подходящий способ быстро обновиться.

# Путь до исходной папки с обновлениями
$Path = "\\Domain\ConfigMgr\Updates\Microsoft\Windows Server 2008 R2"
$Updates = Get-ChildItem -Path $Path -Filter "*.cab" -Recurse
Foreach ($Update in $Updates) {
	&Dism /Online /Add-Package:$($Update.fullname) /NoRestart
}

В моем случае в качестве пути используется доменный DFS-link. В переменной Path требуется указать путь до папки с обновлениями. Такой трюк пройдет только для ОС Windows Server 2008/Vista SP2 и выше.

RS: Отчет по членству локальных групп

Скорее всего многим поступала задача от руководства — определить пользователей, которые входят в группу локальных администраторов и многие решали этот вопрос с помощью скриптов, которые есть в интернете. Но все скрипты, которые я видел, хороши до тех пор, пока не сталкиваешься с разноязычными операционными системами в одной компании. В таких случаях группа администраторов может называться «Администраторы», «Administrators», где-то еще как-то, а кому-то вообще нужен отчет по пользователям и группам, которые входят не в группу локальных администраторов, а в группу пользователей удаленного рабочего стола. В итоге я решил написать скрипт, взяв за основу скрипт Sherry Kissinger. Этот скрипт будет создавать собственный класс — Win32_LocalGroupMember. Данный класс обновляется с помощью адвертайзмента и распространяется на коллекцию «All Systems» (либо собственную), либо через Desired Configuration Management.

' Set variables

Set oWMI = GetObject("winmgmts:root\cimv2")
cDQT = Chr(34)
cSQT = Chr(39)
iCimtypeString = 8
sClassName = "Win32_LocalGroupMember"

' Exit script if computer is a Domain Controller

For Each oComputer in oWMI.ExecQuery("Select DomainRole from Win32_ComputerSystem")
	if (oComputer.DomainRole >= 4) then Wscript.Quit
Next

' Clear class if exists

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

' Create class

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

' Return data to class

Set oClass = oWMI.Get(sClassName).SpawnInstance_
For Each oGroup in oWMI.ExecQuery("Select * From Win32_Group Where LocalAccount = 1")
	For Each oGroupUser in oWMI.ExecQuery("Select PartComponent From Win32_GroupUser Where GroupComponent = "_
	&cSQT&"\\\\"&oGroup.Domain&"\\root\\cimv2:Win32_Group.Domain="_
	&cDQT&oGroup.Domain&cDQT&",Name="&cDQT&oGroup.Name&cDQT&cSQT)
		aSplit = split(oGroupUser.PartComponent,cDQT)
		Select Case lcase(split(aSplit(0),":")(1))
			Case "win32_systemaccount.domain="
				oClass.MemberType = "SystemAccount"
			Case "win32_useraccount.domain="
				oClass.MemberType = "UserAccount"
			Case "win32_group.domain="
				oClass.MemberType = "Group"
			Case Else
				oClass.MemberType = "Unknown"
		End Select
		oClass.MemberName = aSplit(3)
		oClass.MemberDomain = aSplit(1)
		oClass.GroupName = oGroup.Name
		oClass.GroupSID = oGroup.SID
		oClass.Put_
	Next
Next

Далее нам потребуется изменить файл sms_def.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), key ] string MemberName;
	[SMS_Report (TRUE)      ] string MemberDomain;
	[SMS_Report (TRUE)      ] string MemberType;
	[SMS_Report (TRUE), key ] string GroupName;
	[SMS_Report (TRUE)      ] string GroupSID;
};

Следующим этапом требуется запустить данный скрипт на клиентах, причем делать это следует регулярно. Желательно скрипт запускать с той же частотой, что и аппаратная инвентаризация. Т.е. если у вас инвентаризация проходит раз в три дня, то и скрипт запускать следует раз в три дня. После этого можно уже построить отчет по группам, указывая не имя, а SID группы. Список SID встроенных групп можно найти здесь — http://support.microsoft.com/kb/243330. Вот самый простой отчет по доменным пользователям, которые входят в группу локальных администраторов:

SELECT SYS.Name0, GroupName0[Local Group Name], MemberDomain0[Member Domain], MemberName0[Member Name], MemberType0[Type]
FROM v_GS_LocalGroupMember0 LGM
INNER JOIN v_R_System SYS on SYS.ResourceID = LGM.ResourceID
WHERE LGM.GroupSID0 = 'S-1-5-32-544' and LGM.MemberDomain0 != SYS.Name0 and LGM.MemberType0 = 'UserAccount'
ORDER by SYS.Name0

UPDATE 27.06.2014: В ConfigMgr 2012 R2 создается таблица в виде v_GS_CUSTOM_LocalGroupMember0, соответственно запрос будет выглядеть так:

SELECT SYS.Name0, GroupName0[Local Group Name], MemberDomain0[Member Domain], MemberName0[Member Name], MemberType0[Type]
FROM v_GS_CUSTOM_LocalGroupMember0 LGM
INNER JOIN v_R_System SYS on SYS.ResourceID = LGM.ResourceID
WHERE LGM.GroupSID0 = 'S-1-5-32-544' and LGM.MemberDomain0 != SYS.Name0 and LGM.MemberType0 = 'UserAccount'
ORDER by SYS.Name0

Upgrade: System Center 2012 SP1 CTP2

На этой неделе стала доступна пре-релиз версия 2 SP1 для линейки System Center 2012 — http://www.microsoft.com/en-us/download/details.aspx?id=30133. Что добавлено:

Virtual Machine Manager:

  • Улучшена поддержка виртуальной сети;
  • Добавлены расширения для консоли VMM;
  • Возможность конвертировать VHD диски в формат VHDX;
  • Поддержка последних версий XenServer и vSphere.

Configuration Manager и Endpoint Protection:

  • Поддержка Windows 2012;
  • Поддержка клиентов MacOS ;
  • Поддержка Linux/Unix серверов;
  • Командлеты PowerShell.

Data Protection Manager:

  • Увеличена производительность при резервном копировании CSV 2.0:
  • Защита Hyper-V в сетевой папке;
  • Защита Windows Server 2012;
  • Непрерывная защита при Live-миграции виртуальной машины.

Operations Manager:

  • Поддержка IIS8.

Что еще хотелось бы отметить, изменения также коснулись и других продуктов System Center 2012 — это Service Center, App Controller и Orchestrator. Все эти продукты с установленным SP1 CTP2 поддерживают Windows Server 2012 RC и SQL Server 2012. Данный пре-релиз возможно установить только на англоязычные продукты.

OSD: Build and Capture overrides

Возвращаясь к разговору http://social.technet.microsoft.com/Forums/ru-RU/smsru/thread/f1ab14ac-a9f6-4f85-8d0a-1e767b23598f и продолжению http://sccm.com.ua/?p=1764 решил усовершенствовать процесс, т.к. судя по отзывам вопрос актуален для многих. В итоге, решено было написать HTA приложение:

Build and Capture HTA

Необходимые условия для работы приложения — интегрированный пакет HTA в WinPE. Для того, чтобы каждый раз не прописывать какие либо переменные (например, имя пользователя или путь до шары с образами), можете прописать их внутри файла между кавычек:

Set Capture Variables

Если оставить какое либо поле пустым, то этот параметр не будет изменен и будет использоваться то значение, которое указано в консоли SCCM. Данное приложение необходимо запускать до снятия образа:

OSD Build and Capture

Само приложение можно скачать по ссылке PromptCapture.zip (после загрузки смените расширение файла на .zip).

CM: Дампы экзаменов 70-243

Скачал дамп экзамена 70-243 и мягко говоря был шокирован, как вообще люди сдают экзамены по дампам… Вот вопросы и «правильные» ответы к некоторым из них… Не смог ответить на все — не хватило терпения.

Один из вопросов звучит примерно так — В вашей сети содержится System Center 2012 Configuration Manager. Вам необходимо изменить имя организации, отображаемое в Configuration Manager.

«Правильный ответ» был User and Device Affinity. Это вкладка для управления устройствами, правильный ответ в данном случае — Computer Agent.

Разберем еще один вопрос. Ваша сеть содержит System Center 2012 Configuration Manager. Включены аппаратная и программная инвентаризации на всех клиентах. Все компьютеры содержат приложение App1. App1 сохраняет файлы в папку C:\ABC. Все файлы, сохраненные приложением App1 имеют расширение .abc. Вы настраиваете программную инвентаризацию файлов с расширениями .exe и .abc. После 6 месяцев вы обнаруживаете, что на некоторых компьютерах файлы .abc не инвентаризируются. Что вы должны сделать?

«Правильный ответ» — Delete C:\Program Files\App1\NO-SMS_On_Drive.sms. Начнем с того, что файл no_sms_on_drive.sms (также учитывайте написание, что в имени файла используется только нижнее подчеркивание) кладется в корень диска и используется для того, чтобы роль Distribution Point не создавала на данном диске файлы распространяемых приложений. Файл skpswi.dat (от сокращения skip software inventory) используется для того, чтобы файлы в директории, в которой присутствует данный файл не инвентаризировались, данный файл присутствует по-умолчанию в директории Cache клиента Configuration Manager и этот файл пустой, так что менять в нем нечего. Правильный ответ — удалить файл skpswi.dat.

Ваша сеть содержит единственный домен AD. Функциональный уровень домена — windows 2003. Домен содержит следующие сервера:… (опустим перечисление). Пользователи имеют мобильные устройства на платформе Windows Mobile 6.5 и Windows Phone. Вы должны быть уверены, что вы можете управлять настройками мобильных устройств и имеете возможность удаленной очистки содержимого устройства (wipe). Что вы должны сделать?

«Правильный ответ» — обновить все домен-контроллеры до уровня Windows Server 2008 R2. Настроить коннектор Exchange. На самом деле SCCM вполне уверенно чувствует себя в 2003-м домене, схему расширять для SCCM не обязательно (но желательно), единственное условие — сервер SCCM должен быть в домене. Соответственно, правильный ответ — обновить Exchange до 2010, настроить коннектор.

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

В-общем, что я хочу сказать — не используйте дампы для сдачи экзаменов. Самое верное решение — литература и практика. Если у вас не хватает ресурсов развернуть тестовое окружение с сервером Configuration Manager, то вы можете воспользоваться готовой тестовой инфраструктурой, посетив сайт виртуальной лаборатории по ссылке http://technet.microsoft.com/en-us/systemcenter/bb539977.aspx и перейдя к графе «System Center 2012 Configuration Manager». Это самый реальный способ без ущерба корпоративному окружению и дополнительных ресурсов научиться управлять System Center 2012 Configuration Manager.