Синхронизация групп в Active Directory

Иногда неоходимо синхронизировать 2 группы в Active Directiory таким обраом, чтоб изменения состава пользователей одной группы, автоматически изменяло состав пользователей другой группы. Зачем это уже отдельный вопрос и тут не рассматривается. Для этого поможет небольшой скрипт. Для запуска скрипна необходимо установить расширение для ActiveRoles Management Shell for Active Directory от компании Quest Software. А затем воспользоваться таким небольшим скриптом:

Add-PSSnapin Quest.ActiveRoles.ADManagement
$in = (get-qadgroup ‘tstgroupin’).dn
$out = (get-qadgroup ‘tstgroupout’).dn
$ingroupmembers = get-qadgroupmember $in
$outgroupmembers = get-qadgroupmember $out
$rez = compare-object $ingroupmembers $outgroupmembers
foreach($item in $rez){
if ($item.SideIndicator -eq “<=”){
$usrdn = (get-qaduser $item.InputObject).dn
if ($userdn -ne $null){add-qadgroupmember $out -Member $usrdn}
}
if ($item.SideIndicator -eq “=>”){
$usrdn = (get-qaduser $item.InputObject).dn
if ($userdn -ne $null){remove-qadgroupmember $out -Member $usrdn}
} �
}

Скрипт изменяет состав пользователей группы tstgroupout в соответствии с составом пользователей группы tstgroupin. Можно конечно удалить всех и добавить нужных, но это повлечет за собой изменение (хоть и кратковременное) членства в группах пользователей, у которых ничего не изменялось. Кроме того метод “удалить всех и добавить нужных” создаст в журнале безопасности множество лишней информации по изменению членства в группах, которая будет являться недостоверной.

Существует возможность сделать тоже самое что называется из коробки, без использования компонентов от Quest Software. В этом случае скрипт выглядит так:

function get-groupdn ($SAMName)
{
$root = [ADSI]”
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = “(&(objectClass=group)(sAMAccountName= $SAMName))”
$user = $searcher.findall(
if ($user.count -gt 1)
{
$count = 0
foreach($i in $user)
{
write-host $count “: ” $i.path
$count = $count + 1
}
$selection = Read-Host “Please select item: ”
return $user[$selection].path
}
else
{
return $user[0].path
}
}

function get-userdn ($SAMName)
{
$root = [ADSI]”
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = “(&(objectClass=user)(sAMAccountName= $SAMName))”
$user = $searcher.findall(
if ($user.count -gt 1)
{
$count = 0
foreach($i in $user)
{
write-host $count “: ” $i.path
$count = $count + 1
}
$selection = Read-Host “Please select item: ”
return $user[$selection].path
}
else
{
return $user[0].path
}
}

$ingroup = get-groupdn ‘tstgroupin’
$outgroup = get-groupdn ‘tstgroupout’
if ($ingroup -ne $null){
$GroupLDAPin = [adsi]$ingroup
}
if ($outgroup -ne $null){
$GroupLDAPout = [adsi]$outgroup
}
if (($GroupLDAPout -ne $null) -and ($GroupLDAPin -ne $null)){
$rez = compare-object $GroupLDAPin.member $GroupLDAPout.member
foreach($item in $rez){
if ($item.SideIndicator -eq “<=”){
write-host “LDAP://” + [string]$item.InputObject
$GroupLDAPout.Add(“LDAP://”+$item.InputObject)
}
if ($item.SideIndicator -eq “=>”){
write-host “LDAP://” + [string]$item.InputObject
$GroupLDAPout.Remove(“LDAP://”+$item.InputObject)
}
}
}

Разрешение определенных ActiveX только на определенных сайтах

Кому из Вас не надоедала FLASH реклама. Избавиться от нее достаточно просто, достаточно не устанавливать ActiveX компонент, который за воспроизведение отвечает или отключить его. Но на том же YouTube смотреть видео ве-таки хочется. В Internet Explorer 8 (на других не проверял) можно указать какому компоненту на каких сайтах можно работать. В меню идем по пути Tools->Internet Options->Programs->Manage add-ons. В списке находим например Shokwave Flash Object и выбираем его. Далее либо жмем More Information либо щелкаем правой кнопкой мыши по выбраному объекту и опять же выбираем More Information. В свойствах нас интересует Class ID выбранного объекта.

Хоть в свойствах и есть список сайтов, на которых мы можем разрешить выполнение указанного ActiveX, но инструментов для редактирования списка нет.
Для внесения изменений в список создаем файлик следующего содержания:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{D27CDB6E-AE6D-11CF-96B8-444553540000}\iexplore\AllowedDomains]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{D27CDB6E-AE6D-11CF-96B8-444553540000}\iexplore\AllowedDomains\vkontakte.ru]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{D27CDB6E-AE6D-11CF-96B8-444553540000}\iexplore\AllowedDomains\forum.od.ua]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{D27CDB6E-AE6D-11CF-96B8-444553540000}\iexplore\AllowedDomains\www.youtube.com]

Сохраняем его под любым именем с расширением reg и импортируем этот файл в реестр.

Пример файлика вот

Заходим в свойства объекта, как приведено выше и видим, что компонент может запускаться только на указанных сайтах

Быстрые клавиши командной строки и Powershell

Может конечно написаное ниже для кого-то секретом не является, но я это обнаружил чисто случайно. Прогоняя попугая с клавиатуры случайно нажал F7, активным окном была командная строка. К моему удивлению отобразилась история команд. Выглядит это так:

Быстрый поиск привел на сайт http://technet.microsoft.com/en-us/library/ee176868.aspx, который говорит о том, что эта и некоторые другие быстрые клавиши также работают и в консоли powershell.

Некоторые команды Cisco

В связи с тем, что Cisco я конфигурирую не так часто, то многое забываю. Так пара команд для себя, чтоб не зыбать.

Включение вывода на терминал: terminal monitor
Отключение вывода на терминал: terminal no monitor
Отключение debug: no debug all

Прокидывание порта во внутрь сети:

ip nat inside source static tcp ipip intport extip extport extendable

Настройка аппаратной инвентаризации для сбора данных из реестра

Configuration Manager 2007 собирает данные о аппаратном обеспечении на основе конфигурации, которая находится в директории <ConfigMgr install directory>\inboxes\clifiles.src\hinv. Настройки хранятся в двух файлах configuration.mof и sms_def.mof.

Configuration.mof
Используется для создания классов данных, которые собираются в процессе аппаратной инвентаризации. В качестве данных для классов могут выступать данные, находящиеся в репозитории WMI или ключах реестра.

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

Учитывая, что аппаратная инвентаризация собственно таковой не является, можно сконфигурировать клиента аппаратной инвентаризации для сбора любых данных. Данные должны быть помещены либо в хранилище WMI либо в реестр. Создадим несколько записей в реестре, а потом соберем их при помощи агента аппаратной инвентаризации.

Создадим в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ключ TestMSKey. И в данном ключе создадим 3 строковых значения Value1,Value2,Value3 со сзначениями соответственно test1,test2,test3.

Далее вносим соответствующие добавления в файл configuration.mof

#pragma namespace(“\\\\.\\root\\CIMV2“)
#pragma deleteclass(“RegMSKey“, NOFAIL)
[ dynamic, provider(“RegProv”),ClassContext(“local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\TestMSKey“)]

class RegMSKey
{
[Key] string MyKeyName;
[PropertyContext(“Value1“)] string Vl1;
[PropertyContext(“Value2“)] string Vl2;
[PropertyContext(“Value3“)] string Vl3;
};

Примечание: изменять нужно только что, что выделено жирным. После редактирования и сохранения файла configuration.mof можно убедиться что Configuration Manager правильно воспринял конфигурацию. Для этого необходимо перейти в папку <ConfigMgr install directory>\data\hinvarchive и убедиться что отсуствует только что созданный файл configuration.mof.bad.bak и открыть файл configuration.mof и убедиться что их него не исчезли только что введеные строки конфигурации. Для отсутствия проблем при копировании вышеприведенного примера, его лучше ввести вручную. При копировании из статьи добавляются невидимые спец-символы, которые препятствуют нормальному восприятию конфигурации.

Далее вносим изменения в файл Sms_def.mof

#pragma namespace (“\\\\.\\root\\cimv2\\sms“)

#pragma deleteclass(“RegMSKey“,NOFAIL)
[ SMS_Report (TRUE),
SMS_Group_Name (“Test Inventory“),
SMS_Class_ID (“MICROSOFT|TestInventory|1.0“) ]

class RegMSKey : SMS_Class_Template
{
[SMS_Report (TRUE), Key ] string MyKeyName;
[SMS_Report (TRUE)] string Vl1;
[SMS_Report (TRUE)] string Vl2;
[SMS_Report (TRUE)] string Vl3;
};

Убеждаемся, что конфигурация воспринята как описано выше и ждем инвентаризации….

После цикла инвентаризации запускаем Resourse Explorer и смотрим результат:

По желанию можно создать отчеты и включить собранные данные в какой-либо отчет.

Дополнительную информацию можно найти здесь

Создание автоматических инсталляций

Для развертывания приложений средствами SCCM необходимо иметь возможность устанавливать приложения автоматически. К сожалению не всегда это возможно, но даже там где это возможно не всегда удается найти необходимые ключи инсталляции. На просторах интернета был обнаружена страничка – http://unattended.sourceforge.net/installers.php, где собрана информация о ключах многих инсталяторов. Хотелось бы заметить что в конкректном случае он мне не помог, но информация на мой взгляд достаточно полезна.