|
95 / 96 / 13
Регистрация: 10.10.2008
Сообщений: 606
|
|
Кратко о PowerShell.04.05.2010, 23:02. Показов 8247. Ответов 2
Метки нет (Все метки)
PowerShell задумывался как замена старому и глючному WSH. Во время своего появления в 2006г - это была отдельная прога, требующая установки.Сейчас неотъемленная часть новомодной семерки.
Сразу хочу предупредить: синтаксис PowerShell довольно специфичен и заметно отличается от юниксовых (bash’a или zsh). Сначала он даже может показаться сложным, но это только первое впечатление. Главная отличительная особенность шелла — это специфическая обработка вводимой информации. Если bash обрабатывает любое выражение как команду, то в PowerShell используется совершенно другой подход. Он пытается вычислить выражение. То есть если в командной строке bash набрать «5+3», то оболочка выдаст сообщение о том, что команда не найдена. А новая разработка от Microsoft вычислит выражение и выдаст результат на экран. Например: PS C:\Documents and Settings\si> "test" test PS C:\Documents and Settings\si> 5+3*2 11 Проще говоря, PowerShell работает с данными, которые вводятся в командную строку, как с переменными. Ими даже можно манипулироватьпомощью разных методов. К примеру, результат метода split PS D:\Documents and Settings\snake> "shut up mazafaka".split(" "); shut up mazafaka Строка разбилась на части по пробелу. Попробуй метод substring(int Indexstart) — выведется часть строчки, начиная с indexstart. С другой стороны, любые команды и запуск исполняемых файлов осуществляются как есть: главное — не писать их в кавычках. Очень просто объявляются и переменные. Для этого используется стандартный оператор присвоения — «=». Зададим, например, массив и хэш значений: PS C:\Documents and Settings\si> $massiv=@(1,2,3,4,5) PS C:\Documents and Settings\si> $hash=@{key0="value0"; key1="value1"; key2="value2"} А теперь выведем второй элемент каждого из них (замечу, что нумерация индексов начинается с нуля): PS C:\Documents and Settings\si> $massiv[1] 2 PS C:\Documents and Settings\si> $hash["key1"] value1 В PowerShell есть некоторая особенность - командлеты - команды, которые наследуются от одного базового класса, поэтому все данные парсятся одинаково.Командлет обозначается парой «глагол-оболочка», поэтому всегда имеет очень простое и запоминающееся имя. Например, список запущенных процессов и информацию о них можно получить, набрав в консоли команду Get-Process. По умолчанию в поставке шелла идет примерно 130 встроенных cmdlet’ов. Их список можно получить с помощью командлета get-commands, а справку по каждому из них — с помощью get-help <название_командлета>. Интерпретатор поддерживает С#-подобный скриптовый язык, который использует такие возможности шарпа, как циклы (for,while,foreach), условия (if,switch), определение своих собственных пользовательских функций и ограничение видимости переменных (global/script/local/private). Кроме того, можно использовать регулярные выражения, например, в case-блоках оператора switch: switch -regex ($var) { ".*[0-9]+" { "строка заканчивается числом!" } default { "строка не заканчивается числом!" } } Ясно, что все управляющие конструкции языка программирования высокого уровня и более сотни команд на все случаи жизни позволяют автоматизировать любое действие. Нужно только захотеть. Например в папке вперемешку свалены куча разных файлов и статья с расширением doc. Легким движением руки мы получаем информацию о всех документах Word’а: Get-ChildItem | sort-object extension | select name, length, extension | where { $_.extension -eq ".doc" } Естественно, команды совершенно необязательно набирать вручную в командной строке. Можно заранее определить нужную последовательность команд и запихнуть их в скрипт. Сценарии PowerShell представляют собой обычные текстовые файлы с расширением ps1. Попробуем написать простенький сценарий, в котором определим функцию для вывода общего количества файлов в заданном каталоге и их размера. На практике это реализуется очень просто. function dir_size { param ($dir) $list = get-childitem $dir foreach ($ob in $list) { $i++; $size = $size + $ob.Length; } write-host "Размер директории: " $size "Она содержит " $i "элементов" set-alias dsz dir-size } С помощью команды param мы присваиваем переменной $dir значение, которое было переделано в качестве параметра функции (если бы их было несколько, то нужно было бы последовательно указывать несколько переменных через запятую). Далее получаем список директории и заносим его в переменную $list. Для каждого элемента этого списка делается следующее: увеличивается счетчик общего количества данных (переменная $i), а к переменной $size прибавляется размер текущего объекта. Далее информация выводится на экран посредством команды Write-host, а также назначается короткий алиас для быстрого вызова команды Запустить скрипт очень просто — ./”DirSize.ps1”. Другой вариант — записать функцию в профайл, речь о котором пойдет ниже. Все, что находится в файле-профайле, исполняется со стартом PowerShell автоматически. Что пихать в профайл, я думаю, понятно: настройки приглашения, установку алиасов для команд, выполнение каких-нибудь будничных операций, не требующих твоего вмешательства. Например function prompt { $host.ui.rawui.WindowTitle = "Files: " + (get-childitem).count + " Process: " + (get-process).count Write-Host ("PS " + $(get-location) +">") -nonewline -foregroundcolor Magenta return " " } Если добавить эту функцию в свой профайл, то приглашение, которое выводит текущий путь, окрасится в красивый фиолетовый цвет, а в заголовке окна покажется количество элементов в текущем каталоге и число запущенных процессов. Например, подсветкать разных типов файлов соответствующими им цветами, реализуется так $list = get-childitem | sort-object foreach ($objItem in $list) { if ($objItem.Attributes -contains "Directory") { $fgc="cyan" } elseif ($objItem.Extension -eq ".ps1") { $fgc="blue" } elseif ($objItem.Extension -eq ".exe") { $fgc="green" } elseif ($objItem.Extension -eq ".zip") { $fgc="red" } elseif ($objItem.Extension -eq ".rar") { $fgc="red" } else { $fgc="gray" } write-host $objItem.Name, $objItem.Length, $objItem.LastWriteTime -foregroundcolor $fgc } Что можно делать еще. Функция для получения списка оборудования Function Show-InstalledSoftware { $prod = Get-WmiObject win32_product $prod| sort name |ft Name, Version, Vendor, Installdate -a } set-alias sis Show-InstalledSoftware Получаем настройки BIOS gwmi win32_BIOS Свободное место на своих дисках get-wmiobject Win32_LogicalDisk | select deviceid,freespace,size Перейдем к еще одной новаторской фиче PowerShell. Ребята из Microsoft подумали и решили максимально упростить работу пользователя с различными структурами: файловой системой, реестром, множеством переменных. Для всех них определены несколько общих методов, позволяющих легко манипулировать данными. Вот пример. Допустим, мы выбрали в качестве структуры (в плоскости PowerShell — провайдера) файловую систему и совершенно обычным образом перемещаемся между папками и дисками с помощью команды cd. Зашли в диск C:\ и просмотрели содержимое с помощью ls. А теперь выберем в качестве структуры реестр.По большому счету, он очень схож с файловой системой: разделы или ветки — это папки, а ключи реестра — это файлы. Так почему бы не перемещаться по ним аналогичным образом? Провайдером по умолчанию, что логично, установлена файловая система (FileSystem). Чтобы сменить провайдера, необходимо использовать команду Set-Location. Список всех доступных вариантов выдаст команда Get-PSProvider. Скажем, если ты хочешь изучить содержимое реестра, то должен переключиться на него с помощью команды Set-Location HKLM:\. Теперь просмотри список ветки HKLV с помощью ls. Вывод команды отображен на скрине — глянь туда. Ты можешь творить с реестром все, что хочешь. Его ветки теперь для тебя, как папки, и ты можешь бродить по ним через «cd». А значения ключей легко выводятся cat’ом. Это, кстати, одна из самых мощных и полезных фич PowerShell'a. На этом все! Пока!!! Первоисточник: Журнал "Хакер" №91.
3
|
|
| 04.05.2010, 23:02 | |
|
Ответы с готовыми решениями:
2
PowerShell vs PowerShell ISE
|
|
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723
|
|
| 13.05.2010, 18:37 | |
|
спасибо за статью,
это конешно все хорошо, но пока полезного в ней не увидел) как этот шел применять на практике то? может кто то как то применяет его по умному?
0
|
|
|
95 / 96 / 13
Регистрация: 10.10.2008
Сообщений: 606
|
|
| 14.05.2010, 00:10 [ТС] | |
|
http://blogs.technet.com/powershell_ru/
А вообще что конкретно тебя интересует? И google в помощь!!!!
0
|
|
| 14.05.2010, 00:10 | |
|
Помогаю со студенческими работами здесь
3
DHCP vs. PowerShell 2.0
Powershell Core Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|