воскресенье, 5 июня 2011 г.

Основы PowerShell 1.0


Windows PowerShell - что это такое? 
  • Windows PowerShell (далее WPS) - это продвинутая командная строка, подобная UNIX shell, но с поддержкой .NET, COM и WMI.
  • Команды, которые вы вызываете в WPS, называются commandlets (в русской документации они называются командлеты, я же далее буду называть их команды)
  • Команды поддерживают конвейеры (pipelines), т.е. могут передавать результат своей работы другим командам в рамках одной строки вызова
 Где взять?
В Windows 2008 поставляется в дистрибутиве, но требует отдельной установки через добавление роли. Для других ОС нужно скачать дистрибутив с сайта Microsoft. Поддерживаемые ОС:
  • Windows XP with Service Pack 2
  • Windows Server 2003 with Service Pack 1
  • Windows Vista
WPS является .NET приложением и требует наличия .NET 2.0 в системе. WPS может работать в двух режимах – интерактивном и скриптовом. Мы будем рассматривать работу в интерактивном режиме.
Первые команды
Откройте консоль WPS и наберите следующие команды (WPS регистронезависим):
get-process  - вы получите список всех процессов в системе
get-service ms* – вы получите список всех сервисов, имена которых начинаются с ms
get- и нажмите клавишу tab – вы воспользовались функцией автозавершения (нажимая клавишу несколько раз, вы перебираете возможные варианты команд)
Get-Eventlog – эта команда требует ввода параметров, ответьте на приглашениеLogName: и введите  Application – будет выведен системный журнал событий Application

Структура команд
Команда WPS состоит из трех элементов – глагола, существительного и списка параметров (опционально). Глагол и существительное разделены дефисом, например:
get-process
Список параметров передается через пробел, например:
Get-childitem c:\ (будет выведено содержимое корневого каталога)
Если параметр содержит пробел, его надо заключать в кавычки:
Get-childitem “c:\Program Files”
Параметры можно передавать по имени или по порядку. В случае передачи по порядку, он должен соответствовать порядку параметров в документации, иначе будет ошибка. Например:
Get-ChildItem C:\mydata *.doc
Get-ChildItem -Path C:\mydata -Filter *.doc
Get-ChildItem -Filter *.doc -Path C:\mydata
Get-ChildItem *.doc C:\mydata  - эта строка даст ошибку

Параметр без значения называется свитчем, и по смыслу является функцией:
Get-ChildItem с:\mydata\docs –recurse
Автозавершение  также работает с параметрами. Попробуйте это на примере get-childitem +tab. Также при задании параметров поддерживаются стандартные символы заместители (*, ?, интервалы [a-v] и т.п.) , например:
Get-process ?i*
 Псевдонимы (aliases)
Для сокращения ввода и просто для удобства работы при вызове можно применять псевдонимы. Есть встроенные псевдонимы, например ps вместо get-process или gci вместо get-childitem. Полный список псевдонимов можно увидеть через get-alias.
Можно создавать свои псевдонимы. Это делается командами Set-Alias или New-Alias, но они будут доступны только в текущей сессии работы WPS.  Псевдоним можно создать для любой внешней программы, например для Блокнота это выглядит так:
Set-Alias npd notepad.exe
WPS может вычислять выражения. Наберите в строке 2+5 и посмотрите результат).
Посмотреть все команды можно с помощью Get-command. Например, вывод всех команд, начинающихся с get:
Get-command get-*
Справка выводится по команде Get-help. Например, помощь по get-process:
Get-help get-process или get-process -?
Полная справка по команде дается с ключом full
Get-help get-process –full

Конвейеры
WPS поддерживает объектно-ориентрованные конвейеры, которые позволяют передавать результат работы одной команды в другую. Для создания конвейера используется вертикальная черта |. В конвейер передается типизированный .Net объект.
Например, вывод только имени и размера doc файлов размером больше 20Кб, отсортированных по размеру, можно выполнить такой командой:
Get-ChildItem c:\mydata –r -filter *.doc
| Where-Object { $_.Length -gt 20000 }
| Select-Object Name, Length
| Sort-Object Length
| Format-List
Остановить процесс можно так, на примере iexplore:
Get-Process iexplore | Stop-Process
Форматирование вывода осуществляется с помощью следующих команд:
  • Format-Wide вывод в две колонки
  • Format-List детальный список
  • Format-Table таблица
Например, выполните следующие команды и сравните вывод:
Get-process | Format-Wide
Get-process | Format-List
Get-process | Format-Table
Вывод отдельных полей в таблице можно задать так:
Get-Process | Format-Table -p id,processname,handles
Подавление вывода:
Get-Process | Out-Null
Вывод на принтер
Get-Process | Out-Printer
Вывод на конкретный принтер
Get-Process | Out-Printer "Printer 1"
Вывод в файл
Get-Process | Out-file "c:\a\1.txt"
Вывод в файл отформатированной таблицы
Get-Process | Format-Table id, processname, cpu, ws | Out-file "c:\a\1.txt"
Фильтр where для задания условий
Get-Process | Where-Object {$_.ws -gt 1000000 }
Модель навигации

В WPS реализована универсальная модель навигации по различным объектам по образцу навигации по диску. Например, чтобы перейти в реестр, надо выполнить такую команду:
 cd hklm:\
Дальше можно воспользоваться командой dir для просмотра.
Наберите команду Get-PSdrive и вы получите список всех логических дисков WPS. Команда Get-PSProvider покажет всех установленных провайдеров для логических дисков. WPS 1.0 содержит следующие диски:
  • Файловая система (A, B, C и т.д.)
  • реестр (HKCU, HKLM)
  • переменные среды (env)
  • хранилище сертификатов (cert)
  • функции PowerShell (function)
  • переменные PowerShell (variable)
  • псевдонимы PowerShell (alias)

Команды для навигации по дискам:
Get-ChildItem (псевдонимы dir, ls) - просмотр папки
Get-Content (type, cat)  - прочитать элемент
New-Item (ni) - создать элемент
Get-Location (pwd) - просмотр текущего местоположения
Set-Location (cd) - смена расположения

Работа с путями
Одна точка (.) означает текущий каталог, две точки (..) – родительский.
Команда test-path проверяет существование пути.
Команда resolve-path работает с символами заместителями в адресе и выводит все подходящие пути, например:
Resolve-path c:\a* - выведет все каталоги, начинающиеся с буквы a.

Можно задать новый диск, для какого-нибудь сложного пути, чтобы легче его вызывать. Например:
New-PSDrive -Name Mydocs -PSProvider FileSystem –Root "c:\Sample\Docs\"
И затем обращаться к нему так:
Dir mydocs:
Этот новый диск будет виден только в текущей сессии WPS , при этом он остается недоступен другим приложениям.

Консоль
Встроенная консоль небогата возможностями. Основные - клавиши Tab для автозавершения и F7 для вывода истории команд. Параметры окна консоли можно настроить в меню Свойства.
Режим работы консоли – командный или интерпретатора. Командный режим основной, в режим интерпретатора консоль переходит, когда мы вводим параметры команды по шагам, отвечая на выводимые приглашения.
Работа с файловыми системами

Get-PSDrive – посмотреть все диски WPS
Get-PSDrive -psprovider filesystem – посмотреть только диски файловой системы
Get-WmiObject Win32_logicaldisk | Select-Object deviceid,size, freespace – посмотреть букву диска, размер и свободное пространство на всех дисках (здесь используется обращение к WMI классу Win32_logicaldisk)
Get-ChildItem c:\ – просмотр каталога (то же что dir)
Get-ChildItem c:\windows -filter "*.dll" – просмотр каталога с фильтром
Get-ChildItem c:\windows –recurse - просмотр с вложенными каталогами
Get-ChildItem c:\windows | Measure-Object -Property length -min -max -average –sum – подсчет статистики по каталогу
Copy-Item c:\documents\file1.pdf c:\a\f1.pdf – копирование файла
Move-Item с:\documents\f1.pdf c:\a\f1.pdf – перемещение файла
Rename-Item f1.pdf f2.pdf – переименование файла
Remove-Item c:\a\f1.pdf – удаление файла
Get-Item с:\a\f1.pdf - просмотр свойств файла

Работа с документами
Get-Content c:\a\f1.csv - чтение файла
Get-Content c:\a\f1.csv | Measure-Object - вывод количества строк в файле
Get-Process | Out-File c:\a\processes1.txt – вывод результата работы команды в файл
Get-Service | ConvertTo-Html name,status –title "Servicelist" -body "List of services" |Set-Content с:\servicelist.htm – вывод результата работы команды в html файл

Работа с реестром
Set-Location hklm:\software – перейти в ветку реестра
Get-ChildItem hklm:\software – просмотр ветки реестра
New-Item –path hklm:\software -name test – создать новую ветку в реестре
Copy-Item hklm:\software\test hklm:\software\test_old - скопировать ветку реестра
Remove-Item "hklm:\software\test" –Recurse – удалить ветку реестра с вложениями

Автостарт
Get-Wmiobject Win32_StartupCommand – просмотр списка команд в автостарте windows
Общие папки
Get-WmiObject Win32_Share – просмотр списка общих папок

Работа с процессами
Get-Process – просмотр списка процессов
gps | Format-Table -GroupBy Name – вызов списка процессов с помощью псевдонима и с форматированием вывода
Get-Process –id 4011 – просмотр конкретного процесса
Start-Process powershell.exe -Credential (Get-Credential) – запуск процесса
Stop-Process -name iexplore – остановка процесса
Get-Process | where { $_.WS -gt 10MB } | stop-process – остановка процесса с условием

Работа с сервисами

Get-Service | Where-Object {$_.status –eq "running"} – просмотр запущенных сервисов
Get-Service | Where-Object {$_.status –eq "stopped"} – просмотр остановленных сервисов
Get-Service | sort Status | Format-Table -GroupBy Status – форматированный вывод списка сервисов
get-service iisadmin | % { $_.DependentServices } – вывод зависимых сервисов
Start-Service IISADMIN – старт сервиса
Stop-Service IISADMIN –force – старт сервиса вместе с зависимыми
Set-Service IISADMIN -startuptype "manual" – задание режима запуска сервиса

Установка нового сервиса
New-Service -Name "NewAppServer"
-binaryPathName c:\soft\appserver.exe
-Description "New App Server”
-DisplayName "New Application Server"
Start-Service NewAppServer

Работа с железом

Get-WmiObject Win32_Computersystem
Get-WmiObject Win32_OperatingSystem
Get-WmiObject Win32_OperatingSystem | select serialnumber
Get-WmiObject win32_Bios
Get-WmiObject Win32_BootConfiguration
Get-WmiObject Win32_WindowsProductActivation
Get-WmiObject Win32_OSRecoveryConfiguration
Get-WmiObject win32_processor
Get-WmiObject Win32_MemoryDevice
Get-WmiObject Win32_VideoController
Get-WmiObject Win32_SoundDevice
Get-WmiObject Win32_Diskdrive
Get-WmiObject Win32_Tapedrive
Get-WmiObject Win32_CDRomdrive
Get-WmiObject Win32_NetworkAdapter
Get-WmiObject Win32_USBController
Get-WmiObject Win32_Keyboard
Get-WmiObject Win32_PointingDevice
Get-WmiObject Win32_Printer
Get-WmiObject Win32_Printjob

Работа с Event Log
Get-EventLog –list – просмотр списка журналов
Get-EventLog Application – просмотр журнала
Get-EventLog Application -newest 30 – просмотр новых записей в журнале

Работа с учетными записями
Get-WmiObject Win32_Account - все записи
Get-WmiObject Win32_UserAccount - только пользователи
Get-WmiObject Win32_Group – только группы

Работа с ACL

Get-Acl hklm:/software/test – просмотр ACL для ветки реестра
Get-Acl c:\a – просмотр ACL для папки
Get-Acl c:\a\f1.txt – просмотр ACL для файла


Комментариев нет:

Отправить комментарий