Поиск элементов менеджмент-пака

Понадобилось мне на одном из серверов отключить Discovery, потому что компьютер был не доменный, а для дискавери необходим был доменный аккаунт. Да и не было на конкретном сервере никаких файловых сервисов. В эвенте был идентификатор discovery, а вот в Operation Console было его нормальное имя. Поиск нормального имени был осуществлен при помощи вот такой строки на powershell:
get-managementpack | foreach-object{$_.GetDiscoveries()} | where {$_.Name -eq "Microsoft.Windows.FileServer.DFSR.2008R2.DFSRServerDiscovery2008R2"} | select DisplayName
Условивие можно задать в виде $_.Name.Contains(“DFS”) -eq $true

Клиент SCCM не может зарегистрироваться на сайте

Если после установки клиента, он не появляется в консоли SCCM как установленые, на самом клиенте отсуствует список программ для установки и другая видимая активность клиента, то возможно клиент просто не может подключиться к сайту.
В моем случае в логах клиента практически не было лог файлов (что и понятно, ведь клиент толком работать не начал), единственным логом, в котором была какая-то активность, был ClientIDManagerStartup.log.
В нем периодически появлялись события типа:
Error initializing client registration (0x80040222)
RegTask: Failed to refresh MP. Error: 0x80004005
.
В моем случае помогла просто переустановка клиента, в другом аналогичном случае помог вывод-ввод компьютера из домена. (на необходимость повторного ввода компьютера в домен указывало netbios имя компьютера, которое отличалось от полного доменного имени компьютера).

MDT 2010 ошибка обновления каталога развертывания

При попытке обновления каталога развертывания (Deployment Share) процес обновления завершается неудачно, с отображением ошибки:
Unable to mount the WIM, so the update process cannot continue.
Поиск таких ошибок в сети привел к выводу о необходимости проверки версии библиотеки wimgapi.dll, что и было сделано. Однако никаких результатов это не дало. Файлы находились там где и надо, версия – самая последняя на момент проверки. Поэтому было решено пойти другим путем:
Возникла мысль проверить какие на данный момент образы смонтированы командой dism /get-mountedwiminfo. Вывод команды приводить здесь не буду, однако нашелся один смонтированый образ в каталоге C:\Users\username\AppData\Local\Temp\MDTUpdate.1896\Mount. После его отмонтирования процесс обновления завершился без каких-либо ошибок. Расследование почему он остался смонтированым и после каких действий – не проводилось.

Удаление несуществующих устройств

Периодически бывает так, что поменяли сетевую карточку, а попытка переименовать сетевое подключение приводит к неудаче. Происходит это от того, что нес мотря на отсуствие сетевой карточки, она присутствует в системе и присутсвует скрытое сетевое соединение. Для удаления неподключеннх устройств необходимо выполнить следующие команды:
1. Запускаем командную строку в режиме администратора.
2. set devmgr_show_nonpresent_devices=1
cd %SystemRoot%\System32
start devmgmt.msc
3. В диспетчере устройств отмечаем галочку – “Показывать скрытые устройства”.
4. Удаляем все ненужные нам сетеые адаптеры.

Поиск даты последнего входа пользоваеля или компьютера в домен

Для очистки Active Directory от старых пользователей и компьютеров их сначала необходимо найти. найти их просто, дата последнего логина содержится в поле LastLogon. Проблема только в том, что это поле не реплицируется между домен-контролерами и для поиска актуальной даты последнего логина необходимо опросить все домен-контролеры, а затем выбрать самую последнюю дату. Для автоматизации данного процесса, сделан небольшой скрипт на Powershell с использованием GUI, что дает возможность его использовать даже хелпдеску.
Вид окна программы:

Для запуска скрипна необходимо установить расширение для ActiveRoles Management Shell for Active Directory от компании Quest Software. В поле ObjectName вводим имя компьютера или samaccountname пользователя, указываем тип объекта и нажимаем Find и получаем дату последнего входа.

Скрипт брать тут.

Активация агента удаленного управления SCCM 2007

Бывает так, что по той или иной причине подключиться удаленному компьютеру средствами SCCM невозможно по причине деактивированного агента удаленного управления. Можно ждать пока дойдут политики и он включится, а можно активировать его сразу, исправив параметр в реестре.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Client\Client Components\Remote Control]
“Enabled”=dword:00000001

Принудительная очистка базы аудита в SCOM 2007

К сожалению место на дисках имеет свойство заканчиваться. Сервер аудита (Audit Collection Server) хранит все в базе данные, неправильный прогноз размера базы данных приводит к тому, что в один прекрасный день место на диске заканчивается и сервер аудита фактически прекращает работать. Количество дней, за которые хранятся записи в базе аудита, настраивается очень просто, при помощи такого запроса:

USE OperationsManagerAC
UPDATE dtConfig
SET Value = <number of days to retain data + 1>
WHERE Id = 6

Но сделать такие настройки мало, необходимо еще и удалить ненужные данные. Можно конечно дождаться пока данные будут удалены автоматически, но лучше это сделать сразу для возобновления нормальной работы. Для этого необходимо открыть SQL запрос, находящийся в папке \\ACS\%SystemRoot%\System32\Security\AdtServer\DbDeletePartition.sql и заменить строку “!g!” на id раздела, который необходимо удалить. id раздела можно получить, выполнив такой запрос:

SELECT *
FROM dtPartition
ORDER BY PartitionCloseTime

Выбираем самый старый раздел и используем его ID для удаления.

Синхронизация групп в 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)
}
}
}