13 мая 2019

PowerShell скрипт для удаления устаревших и неиспользуемых драйверов из системы

Каждый раз, когда вы устанавливаете или обновляете драйвер устройства, Windows продолжает хранить старую версию драйвера на диске в системном хранилище драйверов (Driver Store). Благодаря этому, если система работает некорректно с новым драйвером или возникает какой-нибудь конфликт, пользователь в любой момент может откатить текущую версию драйвер и заменить его более старой версий. На диске хранилище драйверов расположено в папке C:\windows\system32\DriverStore\FileRepository. Однако, многие пользователи Windows замечают, что со временем размер каталога %windir%\system32\DriverStore\FileRepository начинает занимать все больше и больше места на системном диске. В моем случае размер этого каталога на диске составляет почти 11,5 Гб. Это довольно много, особенно для моего не слишком большого SSD диска.

Чтобы очистить хранилище драйверов от старых и неиспользуемых драйверов, я нашел небольшой PowerShell скрипт, который позволяет удалить все версии одного и того же драйвера в хранилище (по сути это частичные дубли), сохранив в системе только самую свежую версию.

Внимание! Ни в коем случае не нужно вручную удалять папки или файлы из каталога FileRepository!

Важные советы.

  • Для запуска данного скрипта я использовал версию PowerShell, устанавливаемая вместе с Windows Management Framework 5.1 (нужен как минимум WMF4)
  • Перед запуском скрипта убедитесь, у вас под рукой имеются все драйвера для важных компонентов системы (видеокарта, чипсет, звук и т.д.). В случае чего вы сможете с помощью них быстро переустановить драйвер и задействовать проблемное оборудование.
  • Также желательно предварительно создать точку восстановления системы. Для этого воспользуйтесь командой:  . Проверить успешность создания точки восстановления можно с помощью команды 

Список всех сторонних (не Microsoft) драйверов, которые установлены в системе можно получить с помощью утилиты DISM:

Вывод данной команды нужно будет распарсить с помощью PowerShell, найти дубликаты одного и того же драйвера и отсортировать их по дате. Из итогового списка нужно исключить самую последнюю (актуальную) версию каждого драйвера.

Затем можно удалить драйверы, оставшиеся в списке с помощью утилиты pnputil. В некоторых случаях, если драйвер не удается удалить, нужно воспользоваться принудительным удалением с помощью ключа -f.

Сам скрипт выглядит следующим образом:

Совет. Если вы хотите только вывести список неиспользуемых драйверов на экран, закомментируйте строку с командой Invoke-Expression (поставьте перед ней символ #).

Скопируйте указанный код и сохраните его в текстовый файл cleanupdriver.ps1. Откройте командную строку PowerShell с правами администратора и разрешите выполнение неподписанных скриптов:

Запустите скрипт: 

Скрипт удалит неиспользуемые драйвера. После его завершения, перезагрузите компьютер и убедитесь, что все работает нормально (если нет – переустановите драйвера устройств, которые работают некорректно).

В моем случае (с момента установки системы прошло чуть больше 2 лет) размер каталога FileRepository уменьшился с 11,5 до 1.5 Гб. Почти в 8 раз, неплохо!

30 марта 2019

Windows: Лог Выключений/Перезагрузок

При диагностики проблемы, которая вызывает неожиданные перезагрузки или выключения машины под управлением Windows, важно знать, какие события могут быть с этим связаны, коды этих событий (англ. event ID) и как найти соответствующие логи.

В этой заметке я публикую коды событий, связанных с выключением/перезагрузкой системы.

Я также показываю, как просмотреть историю включений/выключений с помощью стандартного приложения «Просмотр событий» (англ. Event Viewer) или из командной строки с помощью PowerShell.

Коды Событий Выключения

Список кодов в журнале событий Windows, связанных с выключением или перезагрузкой системы:

Event ID Описание
41 Система была перезагружена без корректного завершения работы.
1074 Система была корректного выключена пользователем или процессом.
1076 Следует за Event ID 6008 и означает, что первый пользователь (с правом выключения системы) подключившийся к серверу после неожиданной перезагрузки или выключения, указал причину этого события.
6005 Запуск «Журнала событий Windows» (англ. Event Log). Указывает на включение системы.
6006 Остановка «Журнала событий Windows» (англ. Event Log). Указывает на выключение системы.
6008 Предыдущее выключение системы было неожиданным.
6009 Версия операционной системы, зафиксированная при загрузке системы.
6013 Время работы системы (англ. system uptime) в секундах.

«Просмотр событий» — История Выключений

События связанные с выключениями системы (включая дату и время) могут быть просмотрены с помощью программы «Просмотр событий».

Запустить «Просмотр событий» и найти события связанные с выключениями:

  1. Нажмите клавишу  Win, наберите  eventvwr и запустите  Просмотр событий
  2. В панели слева разверните  Журналы Windows и перейдите в  Система
  3. Щелкните правой кнопкой мыши на  Система и выберите  Фильтр текущего журнала...
  4. Введите следующие коды в поле  <Все коды событий> и нажмите  OK:41,1074,1076,6005,6006,6008,6009,6013

Логи Выключений в PowerShell

Журналы выключения/перезагрузки в Windows также можно получить из командной строки с помощью команды 

Например, чтобы отфильтровать 

11 февраля 2019

Включаем PowerShell Remoting через групповую политику

Включение PowerShell Remoting при помощи групповой политики позволит получить удаленно доступ используя PowerShell ко всем клиентам и управлять системой как если бы вы находились за консолью локально.

Настройка PowerShell Remoting

Читать далее
17 ноября 2018

Теневое RDP подключение к рабочему столу пользователя в Windows 10

Помимо использования Remote Assistance, вы можете удаленно подключиться к рабочему столу пользователя Windows 10 с помощью теневого RDP подключения (Remote Desktop Shadowing). Большинство администраторов так или иначе пользовались этим функционалом для подключения к сессиям пользователей на терминальных RDS серверах с Windows Server 2012 R2 / Server 2016. Однако далеко не все знают, что теневое подключение можно использовать для удаленного просмотра и взаимодействия с рабочим столом пользователя и на десктопной Windows 10. Рассмотрим, как это работает.

Читать далее
1 июня 2018

Непонятные штуки — $_ и % в Power Shell

Очень часто нам приходится совершать некую операцию над группой объектов — файлов, процессов, текстовых строк, и т.д. Делать это в PowerShell можно разными способами. Например For:

Читать далее
13 мая 2018

Вход на доменный компьютер под локальной учетной записью

В некоторых случаях требуется на компьютере, который включен в домен Active Directory войти не под доменной, а под локальной учетной записью. Большинству администраторов этот трюк знаком, но пользователи зачастую о нем не знают.

Немного предыстории. После того, как компьютер добавлен в домен Active Directory, вы можете войти в него под учетной записью домена или локального пользователя (если конечно локальная учетная запись не отключена и вход под ней не заблокирован через групповые политики). В Windows XP и Windows Server 2003 на экране входа в систему имелся раскрывающийся список «Вход в систему», в котором можно было выбрать в какой домен вы хотите войти, либо, если нужно зайти под локальной учетной, для этого нужно выбрать пункт

.

Однако в последующих версиях Windows это раскрывающийся список из интерфейса входа в систему убрали. Вместо этого списка на экране входа в систему, появилась небольшая кнопка «Как я могу войти в другой домен» (How to log on to another domain). Если вы нажмете эту кнопку, появится следующий совет.

)

Как вы видите, в тексте сообщения присутствует имя данного компьютера (в нашем примере РKZ-ТZI01K1). И если вы хотите войти под локальной учетной записью, в поле с именем пользователя нужно указать имя локального пользователя в следующем формате РKZ-ТZI01K1\Administrator. Естественно, если имя компьютера довольно длинное и не несет смысловой нагрузки, его набор с клавиатуры может стать настоящим испытанием.

К счастью, есть простой способ, который позволит вам войти в систему под локальной учеткой без указания имени компьютера.

Секрет в том, что Windows использует символ точки (.) в качестве псевдонима для локального компьютера. Поэтому, если в поле с именем пользователя поставить 

, то система будет считать, что вы хотите авторизоваться под локальной учеткой. Соответственно изменится поле Sign in to, вместо имени домена там уже будет указано имя данного компьютера.

Теперь после 

 осталось набрать имя локальной учетной записи и пароль.

Этот небольшой трюк может использоваться для входа на доменный компьютер под локальной учетной записью во всех поддерживаемых версиях Windows, начиная с Windows Vista и заканчивая Windows 10 и Windows Server 2016.

Совет. Аналогичным образом можно авторизоваться на удаленном компьютере в рабочей группе под локальной учетной запись при доступе к общим файлам по протоколу SMB.

31 марта 2018

УДАЛЕНИЕ ВЫШЕДШЕГО ИЗ СТРОЯ КОНТРОЛЛЕРА ДОМЕНА ИЗ ACTIVE DIRECTORY

Может случится ситуация, когда нам необходимо по каким-то причинам вывести контроллер домена из AD (физический выход из строя сервера, например) . При этом необходимо выполнить правильное удаление неактивного DC из Active Direcroty. Проведем пошаговое удаление вышедшего из строя контроллера домена из Active Directory с помощью утилиты NTDSutil.

Читать далее
13 мая 2017

Как узнать серийный номер и модель сервера из командной строки

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

На серверах/компьютерах под управлением ОС Windows информация о серийном номере, производителе и модели может быть получена из командной строки при помощи вызова функций Windows Management Instrumentation (WMI).

Серийный номер

wmic bios get serialnumber

Производитель

wmic csproduct get vendor

Модель

wmic csproduct get name

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

dmidecode –t system

В системах Linux, основанных на Debian, например, Ubuntu, воспользуйтесь sudo dmidecode –system

В RPM системах Linux, таких как  RedHat или Fedora su dmidecode –system

Утилита dmidecode по умолчанию доступна в большинстве дистрибутивов Linux, но в случае необходимости ее можно скачать и установить из репозитария.

3 ноября 2016

Программирование на языке PowerShell

Технология Windows PowerShell позволяет не только выполнять команды администрирования, но и полноценно программировать алгоритмы на языке PowerShell. Для этого в языке PowerShell существуют атрибуты, присущие всем современным языкам программирования такие как: переменные, условия, циклы, массивы, обработка ошибок и все это можно использовать для написания сложных сценариев администрирования.

Язык PowerShell – это объектно-ориентированный скриптовой язык программирования, который является частью технологии Windows PowerShell. Синтаксис всех программных конструкций языка PowerShell схож с синтаксисом СИ подобных языков.

Читать далее
12 октября 2016

Основы Windows PowerShell

В данной статье мы рассмотрим такую технологию от компании Microsoft как Windows PowerShell, мы поговорим о том, что такое PowerShell, что такое командлеты и конвейер, как писать сценарии и модули, а также затронем другие не менее важные и полезные возможности Windows PowerShell.

Что способствовало появлению Windows PowerShell?

До появления PowerShell существовали (и существуют) следующие инструменты для автоматизации и администрирования сервисов: командная строка Windows и Windows Script Host. Но у этих технологий есть недостатки.

Читать далее