Windows – автоматичне додавання маршрутів при встановленні VPN з’єдняння

Нажаль не усі VPN сервери дозволяють сконфігуровати маршрути для клієнтів.  У такому разі кожного разу клієнт має додати маршрути до необхідних мереж після встановлення з’єдняння. Windows дозволяє автоматизувати цей процес. Щоб зробити це необхідно запустити powershell з дозволами адміністратора. Та виконати таку команду:

Add-VpnConnectionRoute -ConnectionName "vpn-name" -DestinationPrefix 10.78.0.00/16 -PassThru

Після цього маршрут 10.78.0.00/16 буде доданий автоматично після встановлення з’єднання з іменем vpn-name

wshom.ocx error (EventID 1000 in Application log)

На некоторых домен-контроллерах в журнале приложений постоянно возникала ошибка 1000 со следующими описаниями:

Faulting application cscript.exe, version 5.7.0.18005, time stamp 0x49e01e5f, faulting module ntdll.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 0xc00000fd, fault offset 0x0004a4d2, process id 0x87d0, application start time 0x01cc114200749b48.

Faulting application cscript.exe, version 5.7.0.18005, time stamp 0x49e01e5f, faulting module wshom.ocx, version 5.7.0.18005, time stamp 0x49e03856, exception code 0xc00000fd, fault offset 0x0000df97, process id 0x84e8, application start time 0x01cc1142b346a8f3.

 

Содержимое ключа состояло в огромном количестве записей вида:

Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)
Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)
Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)
Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD) 

Очистка данного ключа устраняет ошибку и как результат, возникающее событые с номером 1000.

 

Включение логирования событий от диспетчера печати

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

Как оказалось включение логирования данного события принципиально отличается в в редакциях Windows 7/2008 R2 и более ранних. На картинке показано событие из Windows Server 2008 R2.
Отличия следующие: �
1. Номер события был 10, стал 307;
2. Журнал был System, стал Microsoft-Windows-PrintService/Operational;
3. Включаось логирование события в свойствах диспетчера печати, теперь в свойствах соответствующего журнала.

Для включения логирования данного события в Windows Server 2008 R2 необходимо сделать следующее:

Server Manager->Diagnostics->Event Viever->Applications and services Logs->Microsoft->Windows->Microsoft-Windows-PrintService/Operational и нажать Enable Log
Либо установить ключ реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\WINEVT\Channels \Microsoft-Windows-PrintService/Operational-Enabled равным 1.

Для включения логирования данного события в Windows Server 2003 необходимо сделать следующее:
Start-Settings->Control Panel->Printers and Faxes File->Server Properties->Advanced и установить флаг “Log spooler information events
Либо установить ключ реестра: HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control \Print\Providers -> EventLog
равным 7.

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 и получаем дату последнего входа.

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

Синхронизация групп в 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 и импортируем этот файл в реестр.

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

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