Что-то надоело мне постоянно искать этот полезный скрипт. Решил его к себе повесить.
запуск:
cscript WUA_SearchDownloadInstall.vbs
Example
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
WScript.Echo "Searching for updates..." & vbCRLF
Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software'")
WScript.Echo "List of applicable items on the machine:"
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next
If searchResult.Updates.Count = 0 Then
WScript.Echo "There are no applicable updates."
WScript.Quit
End If
WScript.Echo vbCRLF & "Creating collection of updates to download:"
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToDownload.Add(update)
Next
WScript.Echo vbCRLF & "Downloading updates..."
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()
WScript.Echo vbCRLF & "List of downloaded updates:"
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
If update.IsDownloaded Then
WScript.Echo I + 1 & "> " & update.Title
End If
Next
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
WScript.Echo vbCRLF & _
"Creating collection of downloaded updates to install:"
For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToInstall.Add(update)
End If
Next
WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.Echo
If (strInput = "N" or strInput = "n") Then
WScript.Quit
ElseIf (strInput = "Y" or strInput = "y") Then
WScript.Echo "Installing updates..."
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()
'Output results of install
WScript.Echo "Installation Result: " & _
installationResult.ResultCode
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Listing of updates installed " & _
"and individual installation results:"
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & installationResult.GetUpdateResult(i).ResultCode
Next
End If
Ссылка на первоисточник MSDN
Обнаружил, что системный лог забит следующими ошибками:
Имя журнала: System
Источник: Microsoft-Windows-DistributedCOM
Дата: 07.10.2011 10:12:56
Код события: 10016
Категория задачи:Отсутствует
Уровень: Ошибка
Ключевые слова:Классический
Пользователь: система
Компьютер: TITAN.isea.ru
Описание:
Не удается найти описание для идентификатора события 10016 из источника Microsoft-Windows-DistributedCOM. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.
Если событие возникло на другом компьютере, возможно, потребуется сохранить отображаемые сведения вместе с событием.
К событию были добавлены следующие сведения:
для конкретного приложения
Локальный
Запуск
{24FF4FDC-1D9F-4195-8C79-0DA39248FF48}
{B292921D-AF50-400C-9B75-0C57A7F29BA1}
NT AUTHORITY
система
S-1-5-18
LocalHost (с использованием LRPC)
Порывшись по реестру по id B292921D-AF50-400C-9B75-0C57A7F29BA1 обнаружил, что это проблема с NAP службой. Которую я ни как не настраивал для работы в нашей сети. По второму id 24FF4FDC-1D9F-4195-8C79-0DA39248FF48 я службы не нашел. После непродолжительно поиска в гугле обнаружилось, что это nap client от касперского. Меня раздражают ошибки в логах, по этому на сайте поддержки касперского нашлось решение. Для этого надо через реестр отключить nap от касперского, делается очень просто.
На клиентском компьютере выполните следующее:
Перейдите в раздел реестра:
для 32 bit OC
HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\Components\34\1103\1.0.0.0\
для 64 bit ОС
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\Components\34\1103\1.0.0.0\
Создайте раздел NAP;
В разделе NAP создайте DWORD ключ с именем Enable. Присвойте следующие значения:
1 – включить взаимодействие с NAP Agent;
0 – отключить взаимодействие с NAP Agent.
После создания или изменения ключа Enable необходимо перезапустить службу Агента администрирования (Kaspersky Lab Network Agent).
Вот собственно и все. Распространил по всему домену данный ключ с нацеливанием на разные архитектуры по средствам GPP. Так же вот пруфлин на KB на сайте поддержки касперского.
Это памятка больше для себя. Нежели для других.
Заходим на сервер. Удаляем содержимое каталога:
\\lync-01\Shares\1-WebServices-1\ABFiles\00000000-0000-0000-0000-000000000000\00000000-0000-0000-0000-000000000000
Запускаем следующие командлеты в PowerShell:
Ждем появления в логах следующих эвентов с номерами 30024, 30027, 30028 и запускаем еще формирование адресной книги:
ждем появления эвента под номером 62020. После этого на клиенской машине, выгружаем клиента lync и добавляем в реестр ключ для скачивания адресной книги при запуске клиента lync:
reg add HKLM\Software\Policies\Microsoft\Communicator /v GalDownloadInitialDelay /t REG_DWORD /d 0 /f
идем в папку:
%userprofile%\AppData\Local\Microsoft\Communicator\sip_user@sip_domain
и удаляем файл GalContacts.db и GalContacts.db.idx после этого запускаем lync клиент и он подтянет свежею адресную книгу и можно пробовать искать пользователей.
Для выполнения данной операции существует следующая SQL процедура которую можно запустить из SQL Server Management Studio или скрипта.
DECLARE @RC int
DECLARE @_Owner nvarchar(4000)
-- TODO: Set parameter values here.
--set @_Owner="account@company.com"
EXECUTE
@RC = [rtc].[dbo].[ImpDeleteContactGroups2]
"account@company.com"
GO
Очень удобная вещь если ведется тестирование управления списком контактов.
Это делается достаточно просто. Нужно лишь составить запрос для dsquery. Запрос выглядит следующим образом:
dsquery * "CN=ms-Exch-Schema-Version-Pt,CN=Schema,CN=Configuration,DC=isea,DC=ru" -scope base -attr rangeupper
После выполнения данного запрос в cmd появится числовое значение, в моем случаи это 14726. Это говорит, что я расширил схему с дистрибутива Exchange 2010 SP1. А вот примерная табличка по версиям:
Exchange 2007 sp1, for which the ms-Exch-Schema-Version-Pt attribute at rangeUpper = 11116
Exchange 2007 sp2,for which the ms-Exch-Schema-Version-Pt attribute at rangeUpper = 14622
Exchange 2010 RTM, for which the ms-Exch-Schema-Version-Pt attribute at rangeUpper = 14622
Exchange 2010 SP1, for which the ms-Exch-Schema-Version-Pt attribute at rangeUpper = 14726
Краткая памятка как производить удаление вышедшего из строя DC. А то зачастили ко мне обращаться с данными просьбами.
Запустить cmd
01. ntdsutil
02. metadata cleanup
03. connections
04. connect to server (где имя функционирующего DC. Это необходимо сделать на ОС младше Windows Server 2003 SP1)
05. quit
06. select operations target
07. lists sites
08. select site <#> (где <#> номер сайта где у нас находится вышедший из строя DC)
09. list servers in site
10. select server <#> (где <#> номер DC вышедшего из строя)
11. list domains
12. select domain <#> (где <#> номер домена в котором расположен вышедший из строя DC)
13. quit (возвращаемся обратно в меню metadata cleanup)
14. remove selected server (появится окошко предупреждающее нас.)
15. нажимаем Yes
Вот все действия которые необходимо сделать в ntdsutil. Дальше воспользуемся оснастками управления.
В Active Directory Sites and Services удаляем наш сервер и проверяем, что он больше к какому из функционирующих DC не подключен.
В Active Directory Users and Computers удаляем объект компьютера ненадлежащего нашему DC который вышел из строя.
В DNS Manager Удаляем все записи вида ns, a, ptr относящиеся к нашему DC
————————-
Вот собственно и все. Эта заметка я думаю исключительно для меня. Чтоб не забыть.
Необходимо развернуть сайт, но в базе под сайт уже куча таблиц и их надо удалить. Делать это вручную, значит себя не уважать. По этому появилась вот такая замечательная строчка для консоли:
mysqldump -p --add-drop-table --no-data database_name | grep ^DROP | mysql -p database_name
Кто уже пробует у себя на предприятии развернуть sccm 2007 или уже использующий его могли заметить, что он создает большой объем log файлов с достаточно тяжелыми названиями. А если к этому еще добавить клинские log файлы. То в голове образуется каша. В группе по sccm проскочил линк где как раз дается расшифровка этих логов, для чего они нужны и за что отвечают. Собственно вот пруфлинк. Ну и на всякий случай дубль у меня на странице.
Читать далее…
Что-то надоело каждый раз искать синтаксис для файла ответов по настройке контроллера домена на Core и не только серверах. С графическим интерфейсом все можно сделать вручную не особо напрягаясь. А вот в на core серверах приходится использовать данный файл. Ниже приложен шаблон для файла добавочного контроллера доменов. То есть того второго и последующего КД.
[DCINSTALL]
UserName=<username>
UserDomain=<domain>
Password=<password>
SiteName=<site name>
ReplicaOrNewDomain=Replica
DatabasePath="%systemroot%\NTDS"
LogPath="%systemroot%\NTDS"
SYSVOLPath="%systemroot%\SYSVOL"
InstallDNS=yes
ConfirmGC=yes
SafeModeAdminPassword=<password>
ReplicaDomainDNSName=<domain>
RebootOnCompletion=no
Тут я попробую кратно расписать для чего нужны некоторые поля:
UserName – пользователь под которым будет происходить развертывание КД
UserDomain – домен пользователя под которым разворачиваем КД
SiteName – имя сайта в котором будем разворачивать КД
ReplicaOrNewDomain – указываем тип КД, Replica говорит, что это будет добавочный КД
InstallDNS – уставить ли DNS сервер
ConfirmGC – будет ли он сразу глобальным каталогом
SafeModeAdminPassword – пароль для DSRM, при чем после использования файла ответов это поле очищается
ReplicaDomainDNSName – имя домена в который добавляем КД
RebootOnCompletion – необходимо ли перезагружать сервер после развертывания роли
Использовать вот так:
dcpromo /unattend:ReplicaDCCreate.txt
ToDo: Позже добавлю файл для установки первого КД в сети и удаления КД.
Продолжаю автоматизировать работу сервера. В этот раз руки коснулись автоматизации создания архива с конфигурационными файлами. При этом задачи были поставлены следующие:
1. Пути для архивации должны лежать в отдельном файле.
2. Архивироваться должен на сетевой ресурс расшаренный под Windows Server. При этом во время архивирования он должен подключаться, а по окончании отключаться.
3. Архивы должны создавать раз в день/неделю/месяц (тут я добавил от себя, архивы будут хранится с одной ротацией)
Для написания был выбран perl и в итоге получился вот такой скрипт:
#!/usr/bin/perl
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2010.01.20
# Description: Скрипт скрипт создания архива конфигурационных файлов
#########################################################################################
#--- основные переменные
$dst = '/var/files/backup_nt/GW-01';
$dst_local = '/var/files/backup/config';
$mount_path = '/var/files/backup_nt';
chop($hostname = `hostname`);
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year += 1900;
$mon += 1;
#--- преобразовываем формат даты с 1 на 01
sub setformatnumber {
if ($_[0] < 10 ) { return '0'.$_[0] }
else { return $_[0] }
}
#--- проверка подмонтирования директории для архивов
if (!`df -Hac | grep backup_nt`) {
system("mount $mount_path")
}
#--- проверяем на всякий случай доступность пути
if ( -d $dst ) {
#--- создаем список что архивировать
open(list,"/root/list/backup_list");
while($in=<list>) {
$in=~s/\s$//;
$what_backup=$what_backup." ".$in;
}
#--- создаем дневной архив
$to_backup = "$dst/day/$year-".setformatnumber($mon)."-".setformatnumber($mday).".day.$hostname.backup.config.tar.bz2";
system("/usr/bin/tar jvcf $to_backup $what_backup");
#--- удаляем старые дневные архивы
$rm_backup = "$dst/day/$year-".setformatnumber($mon)."-".setformatnumber($mday-2).".day.$hostname.backup.config.tar.bz2";
if ( -e $rm_backup) {
system ("/bin/rm -f $rm_backup");
}
#--- создаем бак за месяц
if ($mday eq 1 ) {
$to_backup = "$dst/month/$year-".setformatnumber($mon)."-".setformatnumber($mday).".month.$hostname.backup.config.tar.bz2";
system("/usr/bin/tar jvcf $to_backup $what_backup");
#--- удаляем старые месячные архивы
$rm_backup = "$dst/month/$year-".setformatnumber($mon-2)."-".setformatnumber($mday).".day.$hostname.backup.config.tar.bz2";
if ( -e $rm_backup ) {
system ("/bin/rm -f $rm_backup");
}
}
#--- создаем недельный архив
if ((localtime(time))[6] eq 1 ) {
$to_backup = "$dst/week/$year-".setformatnumber($mon)."-".setformatnumber($mday).".week.$hostname.backup.config.tar.bz2";
system("/usr/bin/tar jvcf $to_backup $what_backup");
#--- удаляем старые недельные архивы
$rm_backup = "$dst/week/$year-".setformatnumber($mon)."-".setformatnumber($mday-14).".week.$hostname.backup.config.tar.bz2";
if ( -e $rm_backup ) {
system ("/bin/rm -f $rm_backup");
}
}
}
#--- после завершения бекапа отмонтируем директорию
if (`df -Hac | grep backup_nt`) {
system("umount $mount_path")
}
Файл /root/list/backup_list выглядит следующим образом:
[root@gw-01 bin]# cat /root/list/backup_list
/boot
/etc
/root
/usr/local/etc
/var/named
/var/cron/tabs/root
[root@gw-01 bin]#