Description log files SCCM 2007

29 мая 2009 г.
Comments

confmgr

Список и описание всех логов которые ведет SCCM 2007 на TechNet

Ярлыки:

Пример внедрения ILM 2007

Comments

В предыдущих постах я описывал как связать разные службы каталогов при помощи ILM 2007. Здесь я объединю все заметки этой теме воедино.

Что из себя представляет ILM (Microsoft Identity Lifecycle Manager)?  Состоит он из  основных компонентов:

MIIS components

  • Connected data source (подключаемые источники данных);
  • Management Agents (агенты управления);
  • Сonnector Spaces (пространства подключения);
  • Metaverse (Метабаза).

и основные функции ILM:

  • синхронизация каталогов;
  • управление паролями и их синхронизация;
  • управление группами;
  • инициализация учетных записей;
  • публикация сертификатов.

Run management agent ILM 2007

28 мая 2009 г.
Comments

Мы настроили ILM 2007 для синхронизации AD c eDirectory и Sun ONE Directory. Теперь постала задача регулярно выполнять MA (management agent).

Вариант 1

Создать скрипт для каждого профиля агента.

profiles MA

Получим следующий скрипт:

Const PktPrivacy = 6
rem Const wbemAuthenticationLevelPkt = 6
Set Locator = CreateObject("WbemScripting.SWbemLocator")
rem
rem Credentials must only be specified when Microsoft Identity Integration Server is on remote system.
rem
rem Locator.Security_.AuthenticationLevel = wbemAuthenticationLevelPkt
rem Set Service = Locator.ConnectServer("MyServer", "root/MicrosoftIdentityIntegrationServer")
rem Set Service = Locator.ConnectServer("MyServer", "root/MicrosoftIdentityIntegrationServer", "Domain\Me", "MyPassword")
rem
Set 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 MASet
    WScript.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





image



и запускать MASequencer.exe с параметром /F:<имя конфига>



Вариант 3



создать 2-ва скрипта. Сами скрипты взяты с примеров у Microsoft



MA-Runs.cmd:



@echo off
rem
rem Copyright (c) Microsoft Corporation.  All rights reserved.
rem
setlocal
set zworkdir=%~dp0
pushd %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_script
popd
endlocal


runMA.vbs:



option explicit
on 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 s
dim runResult
dim rescode
dim managementagentName
dim profile
dim verbosemode
dim wmiLocator
dim wmiService
dim managementagent
dim server
dim username
dim password
'-----------------------------------------
rescode = ParamExists("/?")
if rescode = true then call DisplayUsage
verbosemode = ParamExists("/v")
managementagentName = ParamValue("/m")
if managementagentName = "" then call DisplayUsage
profile = ParamValue("/p")
if profile = "" then call DisplayUsage
if 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 then
        wscript.echo "%Error: Cannot get WMI Locator object"
        wscript.quit(-1)
end if
server = ParamValue("/s")
password = ParamValue("/a")
username = ParamValue("/u")
if server = "" then server = "." ' connect to WMI on local machine
if verbosemode then
        wscript.Echo "%Info: Connecting to MMS WMI Service on <" & server &">"
        if username <> "" then wscript.Echo "%Info: Accessing MMS WMI Service as <"& username &">"
end if
if username = "" then
        set wmiService = wmiLocator.ConnectServer(server, "root/MicrosoftIdentityIntegrationServer")
else
        set wmiService = wmiLocator.ConnectServer(server, "root/MicrosoftIdentityIntegrationServer", username, password)
end if
if err.number <> 0 then
        wscript.echo "%Error: Cannot connect to MMS WMI Service <" & err.Description & ">"
        wscript.quit(-1)
end if
if verbosemode then wscript.Echo "%Info: Getting MMS Management Agent via WMI"
Set managementagent = wmiService.Get( "MIIS_ManagementAgent.Name='" & managementagentName & "'")
if err.number <> 0 then
        wscript.echo "%Error: Cannot get Management Agent with specified WMI Service <" & err.Description & ">"
        wscript.quit(-1)
end if
wscript.echo "%Info: Starting Management Agent with Profile <"& managementagent.name &":"& profile &">"
runResult = managementagent.Execute(profile)
if err.number <> 0 then
        wscript.Echo "%Error: Running MA <"& err.Description & ">. Make sure the correct profile name is specified."
        wscript.quit(-1)
end if
wscript.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                   '* Counter
        Dim Arguments           '* Arguments from the command-line command
        Dim NumberofArguments   '* Number of arguments from the command-line command
        Dim ArgumentArray       '* Array in which to store the arguments from the command-line
        Dim TemporaryString     '* Utility string
        '* Initialize Return Value to e the Empty String
        ParamValue = ""
        '* If no ParameterName is passed into the function exit
        if ParameterName = "" then exit function
        '* Check if Parameter is in the Arguments and return the value
        Set Arguments = WScript.Arguments
        NumberofArguments = Arguments.Count - 1
        For i=0 to NumberofArguments
                TemporaryString = Arguments(i)
                ArgumentArray = Split(TemporaryString,":",-1,vbTextCompare)
                If ArgumentArray(0) = ParameterName Then
                      ParamValue = ArgumentArray(1)
                      exit function
                End If
        Next
end 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                   '* Counter
        Dim Arguments           '* Arguments from the command-line command
        Dim NumberofArguments   '* Number of arguments from the command-line command
        Dim ArgumentArray       '* Array in which to store the arguments from the command-line
        Dim TemporaryString     '* Utility string
        '* Initialize Return Value to e the Empty String
        ParamExists = false
        '* If no ParameterName is passed into the function exit
        if ParameterName = "" then exit function
        '* Check if Parameter is in the Arguments and return the value
        Set Arguments = WScript.Arguments
        NumberofArguments = Arguments.Count - 1
        For i=0 to NumberofArguments
                TemporaryString = Arguments(i)
                If TemporaryString = ParameterName Then
                      ParamExists = true
                      exit function
                End If
        Next
end Function


И запускаем MA-Runs.cmd



Какой бы вариант мы не выбрали, нужно создать scheduled job и запускать от имени пользователя являющимся членом группы MIISOperators

Ярлыки:

Windows 2008 & Vista Hibernation

27 мая 2009 г.
Comments

Зачем Hibernation в гостевой ОС? Я тоже думаю что ни к чему ;) И если учитывать что в нашей виртуальной среде есть сервера в которых размер системного диска не превышает 40 GB и каждый гигабайт на особом счету ;). Конечно если у Вас системный диск 100 GB, то и переживать не нужно. А мы отключим Hibernate в командной строке выполнив:

powercfg –h off

Освободим дисковое пространство ;)

Restore deleted objects in AD

Comments

Были случаи когда Вы случайно удалили пользователя из 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”. Включаем учетную запись и получаем сообщение:

imageЗначит нужно изменить сначала пароль, а затем включить учетную запись.

Материалы по восстановлению объектов в AD можно почитать на TechNet MSDN

Ярлыки:

Отображение имени пользователя в сетевом окружении.

Comments

После того как при помощи скриптов мы меняем атрибут Description компьютера в AD описанного в этом посте, захотелось аналогично проставлять Description в "My Computer"-> “Properties”  -> "Computer Name". Вот он скрипт, взят с здесь

On Error Resume Next
Set WSHNetwork = CreateObject("WScript.Network")
Path = WSHNetwork.UserName
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUserDN)
Set objWMIService = GetObject("winmgmts:")
Set colSoftware = objWMIService.ExecQuery _
("Select * FROM Win32_Service WHERE Name ='Lanmanserver'" )
For Each objSoftware in colSoftware
objSoftware.StopService()
Next
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\srvcomment",  objUser.DisplayName
Set objWMIService = GetObject("winmgmts:")
Set colSoftware = objWMIService.ExecQuery _
("Select * FROM Win32_Service WHERE Name ='Lanmanserver'" )
For Each objSoftware in colSoftware
objSoftware.StartService()
Next

Ярлыки:

SP2 for Windows Server 2008 and Windows Vista

26 мая 2009 г.
Comments

Сегодня на сайте 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.

Script add description of Сomputer

Comments

Попались на глаза интересные скрипты, которые добавляют к атрибуту Description объекта (объекта-компьютера в AD) имени текущего залогиненого пользователя. Два скрипта прописываются в групповую политику Logon и Logoff соответственно, и делегируются полномочия пользователь на атрибут Description в OU находятся клиентские компьютеры.  Скрипты и как это выглядит  взяты отсюда

image

Скрипт   Logon:

On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo



Скрипт Logoff :


On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo


Делегирование:


Делегирование будем выполнять только для клиентских компьютеров!




    • Right-click the OU/container where computer accounts reside and choose "Delegate Permissions".


    • Click "Next" and in the next dialog add "Domain Users" group. In the next dialog select "Create a custom task to delegate".


    • Select "only the following objects in the folder" and check "computer objects" in the listbox. Click Next.


    • In the next dialog make sure only "Property specific" is checked under "Show these permissions".


    • Check "Write description".


    • Next and Finish.


Ярлыки:

Clear history MA MISS and ILM 2007

Comments

После настройки ILM 2007, нужно периодически очищать историю выполнения MA (агента управления). Вся история хранятся в базе данных, и логично чем больше записей - больше база ILM.

Мы воспользуемся утилитой miisclearrunhistory.exe из MIIS 2003 Resource Tool Kit для очистки истории.

miisclearrunhistory.exe /pr: <кол-во дней > /y

Создаем пользователя и включаем в группу MIISOperators, от его имени будем запускать scheduled job и пусть выполняется ночью.

Ярлыки:

SCOM 2007 R2 Documentation

24 мая 2009 г.
Comments

С выходом SCOM 2007 R2 появилась документация, которая поможет разобраться с планированием, внедрением, управлением Operations Manager 2007 R2.

Ярлыки:

PostFix & Dynamic Group

22 мая 2009 г.
Comments

После настройки почтовика описанного в этом посте, стало возможным осуществить “старую мечту” :)  – рассылку сообщений ВСЕМ пользователям. Для этого нужно:

  1. создать в Sun Directory группу, прописать в атрибуте “mail” – электронный адрес для группы и в атрибуте “memberurl” следующий запрос:

ldap:///dc=dn,dc=local??sub?(&(objectclass=person)(mail=*)(!(nsAccountLock=true))) 

  запрос будет выбирать пользователей у которых присутствует атрибут “mail”  и учетная запись не отключена

    2. подправим наш ldap-groups-sun.cf добавив к переменой special_result_attribute memberurl и получился конфиг:

server_host = sunldap.dn.local 
search_base = ou=People,dc=dn,dc=local 
version = 3 
query_filter = (&(objectclass=groupOfUniqueNames)(|(mailAlternateAddress=%s)(mail=%s))) 
leaf_result_attribute = mail 
result_attribute = mail 
special_result_attribute = uniqueMember,  memberurl 
bind = yes 
bind_dn = uid=ldap,dc=dn,dc=local 
bind_pw = password


Ну и конечно в Postfix с помощью restriction_classes ограничить доступ на этот адрес.

Ярлыки: ,

Postfix-Dovecot-Sun Direcory Server

21 мая 2009 г.
Comments

Была поставлена задача создать почтовую систему и связать ее с Active Directory, но если служба каталогов не будет доступна по какой-то причине, пользователям не будет доставляться почта. И мы решили развернуть еще одну службу каталогов. Выбор остановили на SUN ONE Directory Server. Он бесплатный, документация отличная и что немало важно управлять ним можно через WEB или java консоль, а синхронизировать Active Direcory и Sun Direcory мы будем с помощью ILM 2007 (Microsoft Identity Lifecycle Manager).

Script StartUP Sun ONE Directory Server

20 мая 2009 г.
Comments

Тут пример скрипта для старта-рестарта-стопа Sun ONE Directory Server 5.2 (у меня такой).   Создаем в /etc/init.d файл sun-dir следующего содержания:

#!/bin/sh 
# chkconfig: - 80 80 
# description: This script is used as a startup script. 
# processname: start-sun-dir 
NETSITE_ROOT=/opt/sun 
final_exit_code=0 
case "$1" in 
   start) 
        # start Directory Server 
        $NETSITE_ROOT/slapd-sunldap/start-slapd 2>&1 
        # start Administration Server 
        $NETSITE_ROOT/start-admin 2>&1 
        exit ${final_exit_code} 
        ;; 
   stop) 
        # stop Directory Server 
        $NETSITE_ROOT/slapd-sunldap/stop-slapd 2>&1 
        # stop Administration Server 
        $NETSITE_ROOT/stop-admin 2>&1 
        exit ${final_exit_code} 
        ;; 
   restart) 
        # stop Directory Server 
        $NETSITE_ROOT/slapd-sunldap/stop-slapd 2>&1 
        # stop Administration Server 
        $NETSITE_ROOT/stop-admin 2>&1 
        # start Administration Server 
        $NETSITE_ROOT/start-admin 2>&1 
        # start Directory Server 
        $NETSITE_ROOT/slapd-sunldap/start-slapd 2>&1 
        exit ${final_exit_code}
        ;; 
   *) 
        if [ -z $1 ] 
        then 
                echo "Usage: $0 {start|stop|restart}" >&2 
        fi 
        exit 1 
        ;; 
esac


правим пути и выполняем chkconfig sun-dir on



Все…, теперь наш Sun ONE Directory Server  будет корректно стартовать при старте ОС

Ярлыки: