Description log files SCCM 2007
29 мая 2009 г.Список и описание всех логов которые ведет SCCM 2007 на TechNet
Пример внедрения ILM 2007
В предыдущих постах я описывал как связать разные службы каталогов при помощи ILM 2007. Здесь я объединю все заметки этой теме воедино.
Что из себя представляет ILM (Microsoft Identity Lifecycle Manager)? Состоит он из основных компонентов:
- Connected data source (подключаемые источники данных);
- Management Agents (агенты управления);
- Сonnector Spaces (пространства подключения);
- Metaverse (Метабаза).
и основные функции ILM:
- синхронизация каталогов;
- управление паролями и их синхронизация;
- управление группами;
- инициализация учетных записей;
- публикация сертификатов.
Run management agent ILM 2007
28 мая 2009 г.Мы настроили ILM 2007 для синхронизации AD c eDirectory и Sun ONE Directory. Теперь постала задача регулярно выполнять MA (management agent).
Вариант 1
Создать скрипт для каждого профиля агента.
Получим следующий скрипт:
Const PktPrivacy = 6rem Const wbemAuthenticationLevelPkt = 6Set Locator = CreateObject("WbemScripting.SWbemLocator")remrem Credentials must only be specified when Microsoft Identity Integration Server is on remote system.remrem Locator.Security_.AuthenticationLevel = wbemAuthenticationLevelPktrem Set Service = Locator.ConnectServer("MyServer", "root/MicrosoftIdentityIntegrationServer")rem Set Service = Locator.ConnectServer("MyServer", "root/MicrosoftIdentityIntegrationServer", "Domain\Me", "MyPassword")remSet Service = GetObject("winmgmts:{authenticationLevel=PktPrivacy}!root/MicrosoftIdentityIntegrationServer")Set MASet = Service.ExecQuery("select * from MIIS_ManagementAgent where Guid = '{12B4583D-C2D8-43A1-BF48-28651247DE41}'")for each MA in MASetWScript.Echo "Running " + MA.name + ".Execute(""Full Import-Full Synchronization"")..."WScript.Echo "Run completed with result: " + MA.Execute("Full Import-Full Synchronization")next
Объединив все профили всех МА в один скрипт.
Вариант 2
Воспользоваться утилитой MASequencer.exe из MIIS 2003 Resource Tool Kit, предварительно создав XML конфиг утилитой MAConfigurationViewer.exe
и запускать MASequencer.exe с параметром /F:<имя конфига>
Вариант 3
создать 2-ва скрипта. Сами скрипты взяты с примеров у Microsoft
MA-Runs.cmd:
@echo offremrem Copyright (c) Microsoft Corporation. All rights reserved.remsetlocalset zworkdir=%~dp0pushd %zworkdir%cscript runMA.vbs /m:"MA_Active_Directory" /p:"Full Import-Full Synchronization"if {%errorlevel%} NEQ {0} (echo Error[%errorlevel%]: command file failed) & (goto exit_script)cscript runMA.vbs /m:"MA_Sun" /p:"Full Import-Full Synchronization"if {%errorlevel%} NEQ {0} (echo Error[%errorlevel%]: command file failed) & (goto exit_script)cscript runMA.vbs /m:"MA_Novell" /p:"Full Import-Full Synchronization"if {%errorlevel%} NEQ {0} (echo Error[%errorlevel%]: command file failed) & (goto exit_script)cscript runMA.vbs /m:"MA_Active_Directory" /p:"Export"if {%errorlevel%} NEQ {0} (echo Error[%errorlevel%]: command file failed) & (goto exit_script)cscript runMA.vbs /m:"MA_Sun" /p:"Export"if {%errorlevel%} NEQ {0} (echo Error[%errorlevel%]: command file failed) & (goto exit_script)cscript runMA.vbs /m:"MA_Novell" /p:"Export"if {%errorlevel%} NEQ {0} (echo Error[%errorlevel%]: command file failed) & (goto exit_script):exit_scriptpopdendlocal
runMA.vbs:
option expliciton error resume next'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='SCRIPT: runMA.vbs'DATE: 2003-02-05'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='= Copyright (C) 2003 Microsoft Corporation. All rights reserved.'='******************************************************************************'* Function: DisplayUsage'*'* Purpose: Displays the usage of the script and exits ths script'*'******************************************************************************Sub DisplayUsage()WScript.Echo ""WScript.Echo "Usage: runMa </m:ma-name> </p:profile-name>"WScript.Echo " [/s:mms-server-name]"WScript.Echo " [/u:user-name]"WScript.Echo " [/a:password]"WScript.Echo " [/v] Switch on Verbose mode"WScript.Echo " [/?] Show the Usage of the script"WScript.Echo ""WScript.Echo "Example 1: runMa /m:adma1 /p:fullimport"WScript.Echo "Example 2: runMa /m:adma1 /p:fullimport /u:domain\user /a:mysecret /v"WScript.Quit (-1)End Sub'******************************************************************************' Script Main Execution Starts Here'******************************************************************************'--Used Variables--------------------------dim sdim runResultdim rescodedim managementagentNamedim profiledim verbosemodedim wmiLocatordim wmiServicedim managementagentdim serverdim usernamedim password'-----------------------------------------rescode = ParamExists("/?")if rescode = true then call DisplayUsageverbosemode = ParamExists("/v")managementagentName = ParamValue("/m")if managementagentName = "" then call DisplayUsageprofile = ParamValue("/p")if profile = "" then call DisplayUsageif verbosemode then wscript.echo "%Info: Management Agent and Profile is <"& managementagentName &":"& profile &">"if verbosemode then wscript.Echo "%Info: Getting WMI Locator object"set wmiLocator = CreateObject("WbemScripting.SWbemLocator")if err.number <> 0 thenwscript.echo "%Error: Cannot get WMI Locator object"wscript.quit(-1)end ifserver = ParamValue("/s")password = ParamValue("/a")username = ParamValue("/u")if server = "" then server = "." ' connect to WMI on local machineif verbosemode thenwscript.Echo "%Info: Connecting to MMS WMI Service on <" & server &">"if username <> "" then wscript.Echo "%Info: Accessing MMS WMI Service as <"& username &">"end ifif username = "" thenset wmiService = wmiLocator.ConnectServer(server, "root/MicrosoftIdentityIntegrationServer")elseset wmiService = wmiLocator.ConnectServer(server, "root/MicrosoftIdentityIntegrationServer", username, password)end ifif err.number <> 0 thenwscript.echo "%Error: Cannot connect to MMS WMI Service <" & err.Description & ">"wscript.quit(-1)end ifif verbosemode then wscript.Echo "%Info: Getting MMS Management Agent via WMI"Set managementagent = wmiService.Get( "MIIS_ManagementAgent.Name='" & managementagentName & "'")if err.number <> 0 thenwscript.echo "%Error: Cannot get Management Agent with specified WMI Service <" & err.Description & ">"wscript.quit(-1)end ifwscript.echo "%Info: Starting Management Agent with Profile <"& managementagent.name &":"& profile &">"runResult = managementagent.Execute(profile)if err.number <> 0 thenwscript.Echo "%Error: Running MA <"& err.Description & ">. Make sure the correct profile name is specified."wscript.quit(-1)end ifwscript.Echo "%Info: Finish Running Management Agent"wscript.Echo "%Result: <" & CStr(runResult) & ">"wscript.quit(0)'******************************************************************************'* Function: ParamValue'*'* Purpose: Parses the command line for an argument and'* returns the value of the argument to the caller'* Argument and value must be seperated by a colon'*'* Arguments:'* [in] parametername name of the paramenter'*'* Returns:'* STRING Parameter found in commandline'* "" Parameter NOT found in commandline'*'******************************************************************************Function ParamValue(ParameterName)Dim i '* CounterDim Arguments '* Arguments from the command-line commandDim NumberofArguments '* Number of arguments from the command-line commandDim ArgumentArray '* Array in which to store the arguments from the command-lineDim TemporaryString '* Utility string'* Initialize Return Value to e the Empty StringParamValue = ""'* If no ParameterName is passed into the function exitif ParameterName = "" then exit function'* Check if Parameter is in the Arguments and return the valueSet Arguments = WScript.ArgumentsNumberofArguments = Arguments.Count - 1For i=0 to NumberofArgumentsTemporaryString = Arguments(i)ArgumentArray = Split(TemporaryString,":",-1,vbTextCompare)If ArgumentArray(0) = ParameterName ThenParamValue = ArgumentArray(1)exit functionEnd IfNextend Function'******************************************************************************'* Function: ParamExists'*'* Purpose: Parses the command line for an argument and'* returns the true if argument is present'*'* Arguments:'* [in] parametername name of the paramenter'*'* Returns:'* true Parameter found in commandline'* false Parameter NOT found in commandline'*'******************************************************************************Function ParamExists(ParameterName)Dim i '* CounterDim Arguments '* Arguments from the command-line commandDim NumberofArguments '* Number of arguments from the command-line commandDim ArgumentArray '* Array in which to store the arguments from the command-lineDim TemporaryString '* Utility string'* Initialize Return Value to e the Empty StringParamExists = false'* If no ParameterName is passed into the function exitif ParameterName = "" then exit function'* Check if Parameter is in the Arguments and return the valueSet Arguments = WScript.ArgumentsNumberofArguments = Arguments.Count - 1For i=0 to NumberofArgumentsTemporaryString = Arguments(i)If TemporaryString = ParameterName ThenParamExists = trueexit functionEnd IfNextend Function
И запускаем MA-Runs.cmd
Какой бы вариант мы не выбрали, нужно создать scheduled job и запускать от имени пользователя являющимся членом группы MIISOperators
Windows 2008 & Vista Hibernation
27 мая 2009 г.Зачем Hibernation в гостевой ОС? Я тоже думаю что ни к чему ;) И если учитывать что в нашей виртуальной среде есть сервера в которых размер системного диска не превышает 40 GB и каждый гигабайт на особом счету ;). Конечно если у Вас системный диск 100 GB, то и переживать не нужно. А мы отключим Hibernate в командной строке выполнив:
powercfg –h off
Освободим дисковое пространство ;)
Restore deleted objects in AD
Были случаи когда Вы случайно удалили пользователя из Active Directory? :) Лично у меня да. Создавать новую учетную запись вариант не самый лучший. Мы попробуем ее восстановить. Нам понадобится ldp.exe из Windows Support Tools и немного знаний об объектах “Tombstone Objects”.
Что же происходит в AD когда мы удаляем объект? На самом беле объект не удаляется сразу, а перемещается в контейнер “Deleted Objects”. При этом у него меняется значение атрибута “distinguishedName” – после имени появляется флаг 0ADEL, появляется атрибут “isDeleted” значения которого True или False говорят о том что объект помечен на удаление, и в атрибут “whenChanged” проставляется время удаления объекта. После этого по контейнеру “Deleted Objects” проходится так называемый “Garbage Collector” (сборщик мусора) и проверяет не наступило ли время захоронения объекта. И если это так - то объект удалится навсегда. Время захоронения в днях определяется атрибутом “tombstoneLifetime” объекта “CN=Directory Service, CN=Windows NT, CN=Services, CN=Configuration, DC=ForestRoot Domain Name” по умолчания он принимает значение:
- 180 дней если контролер домена расположен на Windows Server 2003 с Service Pack 1 (SP1), Windows Server 2003 с Service Pack 2 (SP2), Windows Server 2008, Windows Server 2008 R2
- 60 дней если контролер домена расположен на Windows 2000 Server, Windows Server 2003, Windows Server 2003 R2
И так присоединяемся к контролеру домена используя утилиту ldp.exe. Чтобы нам увидеть контейнер “Deleted Objects” делаем следующие:
- в меню Options выбираем команду Controls
- окне в поле Load Predefined из ниспадающего списка выбираем Return deleted objects
Затем окне Tree view в поле BaseDN выбираем корень леса и ищем контейнер CN=Deleted Objects, находи объект который мы хоти восстановить.
Теперь самое интересное:
Правым кликом вызываем контекстное меню, выбираем в нем пункт Modify.
- в разделе Edit Entry, в поле Attribute вводим “isDeleted”, в панели Operation выбираем Delete, затем жмем Enter.
- в разделе Edit Entry, в поле Attribute вводим имя атрибута “distiguishedName” в поле Values вводим значение атрибута “CN” который был до удаления плюс значение атрибута “lastKnownParent”
- в разделе Operation, выбираем – Replace, жмем Enter
- выбираем флаги Synchronous и Extended нажимаем кнопку Run
Вызываем оснастку dsa.msc, переходив в контейнер который был указан в атрибуте “lastKnownParent”. Включаем учетную запись и получаем сообщение:
Значит нужно изменить сначала пароль, а затем включить учетную запись.
Материалы по восстановлению объектов в AD можно почитать на TechNet MSDN
Отображение имени пользователя в сетевом окружении.
После того как при помощи скриптов мы меняем атрибут Description компьютера в AD описанного в этом посте, захотелось аналогично проставлять Description в "My Computer"-> “Properties” -> "Computer Name". Вот он скрипт, взят с здесь
On Error Resume NextSet WSHNetwork = CreateObject("WScript.Network")Path = WSHNetwork.UserNameSet objSysInfo = CreateObject("ADSystemInfo")strUserDN = objSysInfo.UserNameSet objUser = GetObject("LDAP://" & strUserDN)Set objWMIService = GetObject("winmgmts:")Set colSoftware = objWMIService.ExecQuery _("Select * FROM Win32_Service WHERE Name ='Lanmanserver'" )For Each objSoftware in colSoftwareobjSoftware.StopService()NextSet WSHShell = WScript.CreateObject("WScript.Shell")Set WshNetwork = CreateObject("WScript.Network")WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\srvcomment", objUser.DisplayNameSet objWMIService = GetObject("winmgmts:")Set colSoftware = objWMIService.ExecQuery _("Select * FROM Win32_Service WHERE Name ='Lanmanserver'" )For Each objSoftware in colSoftwareobjSoftware.StartService()Next
SP2 for Windows Server 2008 and Windows Vista
26 мая 2009 г.Сегодня на сайте Microsoft стал доступен SP2 (KB948465) для Windows Server 2008 и Windows Vista. SP2 поддерживает пока только English, German, French, Japanese, Spanish языки.
Подробней о пакет обновления на Technet для Windows Vista Windows Server 2008
Сам пакет обновления 2 x86 IA64 x64 , доступны они так же и через WSUS.