вторник, 31 марта 2015 г.

PowerShell: экспорт всех сторонних драйверов для Windows 8.1, 2012 R2 и выше

Такая возможность появилась в версии PowerShell 4.0. Открываем консоль PowerShell с повышенными привилегиями и выполняем команду:

Export-WindowsDriver -Online -Destination c:\Temp\Drivers

где параметр "Destination" - путь к директории, куда будут извлечены драйвера.


После выполнения вы получите следующую структуру папок с файлами драйверов:


Теперь можно спокойно переустановить систему без необходимости повторного поиска и скачки пакетов драйверов устройств.

понедельник, 30 марта 2015 г.

Решение проблемы выключения виртуального хоста на VMware vSphere ESXi 5.x

В некоторых сложных ситуациях гипервизор может не позволить вам выключить гостевую ОС даже аппаратно(с помощью команды Power Off). Решить проблему можно следующим способом:

1. Для начала определяем гипервизор на котором запущена гостевая ОС.
2. Подключаемся к нему по протоколу SSH или садимся за консоль сервера.
3. Авторизуемся под root и находим все процессы нашей виртуальной машины, используя фильтр grep:

ps -s |grep vmx |grep vm-xp

где vm-xp - имя гостевой системы(регистрозависимое).


4. Убиваем процессы, содержащие в названии "vcpu". Для этого выполняем команду:

kill WID

где в нашем примере WID = 4179521 (kill 4179521).
Если процесс не завершается, добавляем параметр:

kill -9 WID

5. Повторно выполняем  "ps -s |grep vmx |grep vm-xp", чтобы убедиться в отсутствии процессов виртуальной машины "vm-xp".

Теперь можно заново загрузить ОС или выполнить необходимые настройки гостевой системы.

суббота, 28 марта 2015 г.

VBScript: поиск устаревших аккаунтов пользователей в Active Directory

Скрипт позволяет вычитать из Active Directory пользовательские аккаунты с последним удачным входом не позднее N-ого дня назад. Таким образом можно выявить устаревшие учётные записи и впоследствии удалить их.

FQDN - имя LDAP вашего домена или нужной ветки;
intTimeLimit - делать выборку тех записей, которые авторизовались в домене более данного количества дней назад;
fileUserLst - файл отчёта по работе скрипта формата .csv.

ON ERROR RESUME NEXT
FQDN = "DC=mydomain,DC=corp" 'Input your Fully Qualified Domain Name or LDAP path to subtree
intTimeLimit = 365  'Time limit in number of days
fileUserLst = "c:\Temp\user_list.csv" 'File name for saving list of users
Const ADS_SCOPE_SUBTREE = 2
' Obtain local Time Zone bias from machine registry.
' This bias changes with Daylight Savings Time.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
    & "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
    lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
    lngBias = 0
    For k = 0 To UBound(lngBiasKey)
        lngBias = lngBias + (lngBiasKey(k) * 256^k)
    Next
End If
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name,sAMAccountName,lastLogonTimestamp from " & "'LDAP://" & FQDN & "' where objectCategory='person' and objectClass='user'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.CreateTextFile(fileUserLst, True)
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordset.EOF
 objLogon = objRecordSet.Fields("lastLogonTimestamp")
 intLogonTime = objLogon.HighPart * (2^32) + objLogon.LowPart
 intLogonTime = intLogonTime / (60 * 10000000) - lngBias
 intLogonTime = intLogonTime / 1440
 If intLogonTime + #1/1/1601# < Now - intTimeLimit Then
  objFile.WriteLine( objRecordSet.Fields("Name").Value & ","& objRecordSet.Fields("sAMAccountName").Value & "," & intLogonTime + #1/1/1601#)
 End If
 objRecordSet.MoveNext
Loop

Если данный скрипт будет показывать время входа каждого пользователя 1/1/1601, то вероятно у вас уровень домена Windows 2000 или Windows 2003. Чтобы заставить работать запрос, измените "lastLogon" в скрипте на "lastLogonTimestamp".

понедельник, 9 марта 2015 г.

Решение проблемы с бесконечным циклом перезагрузки Windows 2008 и выше при некорректной установке обновления

Если ваша ОС Windows при установке очередного обновления вошла в бесконечный цикл перезагрузки, демонстрируя каждый раз вам что-то вроде этой надписи:"Configuring Updates: Stage 3 of 3", действуйте следующим образом:

1. Чтобы отключить выполняющийся скрипт, совершающий дополнительные действия установки обновлений при загрузке системы, вам необходимо получить монопольный доступ к файлам в папке "Windows". Для этого достаточно использовать любой загрузочный диск, например с "Windows PE".
2. Далее находим в папке "%windir%\winsxs\" текстовые скрипты, начинающиеся с "pending..." и "poqexec...", перемещаем их в любую другую директорию в качестве бэкапа.
3. Загружаемся в обычном режиме, находим и скрываем проблемные обновления и т.д.

В случае успешного исхода можно удалить бэкапы скриптов обновлений.