Трюки PowerShell. Часть 2

пятница, 14 мая 2010, Alexander Honcharuk

Пришло время продолжить бесконечную серию статей "Трюки PowerShell". В комментариях можете оставить пожелания к трюкам/задачам, которые хотели бы cделать в PowerShell. Итак, продолжим.

Поиск истории обновлений

Всякий раз, когда Windows устанавливает обновления через Windows Update, он регистрирует их, в Windowsupdate.log файле. С PowerShell можно разобрать этот файл. Вы должны использовать следующую команду, что б выяснить, сколько обновлений вы получили и в какие даты:

Get-Content $env:windir\windowsupdate.log | Where-Object { $_ -like '*successfully installed*'} |  Foreach-Object { $_.Split("`t")[0] } | Group-Object –NoElement

Вот у меня такой результат (только поставил ОС и еще не успел обновится нормально):

Count Name                    
---------                    
     1 2009-11-01              
     1 2010-01-27              
   21 2010-01-31              
     1 2010-04-05

Тут читается log файл, где выбираются только строки с ключевыми словами "successfully installed", извлекает дату установки, которая стоит в начале строки отделенная таб символом.

Получаем все IP адреса машины

Если вы хотите знать все IP адреса, назначенные на машину, надо использовать WMI:
Get-WMIObject win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true } | Select-Object IPAddress

Вы также можете подключаться к удаленным машинам и узнавать их IP адреса с помощью команды Get-WMIObject, которая поддерживает параметры -ComputerName и -Credential.

Создание диапазона чисел

С помощью PowerShell можно легко задать диапазон чисел, приведем пример преобразования ascii кодов в символы:

65..90 | Foreach-Object { "$([char]$_):" }

Вот результат моего выполнения:

A:
B:
C:
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z:

Проверяем существование ключа реестра

Если вы хотите, проверить, существует ли определенный ключ реестра, то вы должны помнить, что все ключи реестра, рассматриваются как папки на диске, поэтому у них есть пути. Их существование можно проверить так:

Test-Path HKCU:\Software\Testkey

Поиск сервисов

С WMI можно по ключевым словам осуществить поиск сервисов. Для примера покажем код, который выведет все сервисы со словом "cert" в описании:

Get-WmiObject win32_service -Filter 'Description like "%cert%"' | Select-Object Caption, StartMode, State, ExitCode

Вот мои сервисы, которые вывелись:

Caption                    StartMode           State                          ExitCode
-------                      ---------               -----                          --------
BitLocker Drive ...      Manual              Stopped                       1077
Certificate Prop...      Auto                  Running                       0
Cryptographic Se...    Auto                  Running                       0
Health Key and C...   Manual              Stopped                       1077
Remote Desktop C... Manual              Running

Чтение журнала системных событий.

Эта строка выведет все предупреждения (Wornings) из журнала событий:
Get-EventLog System | Where-Object { $_.EntryType -eq 'Warning' }

Эта команда работает, но неэффективно, потому, что занимает много времени. Потому, что она считывает все события а потом отфильтровует те, что вам надо. Та и набирать ее дольше чем следующую:

Get-EventLog System -EntryType Warning

Команда выше работает быстрее, поскольку сразу возвращает те события, которые нужно.

Использование переменной $null

Вы можете использовать $null в качестве специальной переменной, представляющей значение "ничего”. Вы можете использовать её, чтобы определить (и разобраться) не существующие данные, например:

Get-Process | Where-Object { $_.Company -ne $null } | Select-Object Name, Company

Если вы все еще получаете процессы с пустым значением имени компании, то вы видите на самом деле пустую строку. Если вы хотите также устраненить эту проблему пустых строк, то попробуйте выполнить следующее:

Get-Process | Where-Object { $_.Company -ne $null } | Where-Object { $_.Company -ne ''} | Select-Object Name, Company

P.S.
Я не выводил результаты выполнения всех команд, поскольку они очень большие, ну вы можете попробовать их у себя сами.


Ищите нас в интернетах!

Комментарии

Свежие вакансии