Powershell - это такая командная оболочка в современных версиях винды. Входит в её состав начиная с Windows 7, на XP ставится отдельно. Базируется на .Net Framework и предоставляет более широкие возможности, чем стандартная cmd. У меня на работе окошко powershell-а запущенно постоянно, потому что позволяет быстро что-то рассчитать, сгенерировать или проверить, выполнить всякие администраторские вещи на компьютере. Примеры таких простых действий мне и захотелось привести: может что-то из них покажется кому-то полезным, может даст базовое представление об этом языке или вообще программерстве в целом.
Читать дальше
Иконка Powershell выглядит вот так:

Располагаться она должна где-то в районе раздела "Стандартные" в меню "Пуск". Однако же если найти совсем нигде не удаётся, то запустить консоль можно, например, нажав клавишу Win + R и введя в появившемся окне powershell.exe
Итак, простые примеры того, что можно сделать открывшейся командной строке.
1. Подсчитать длину строки.
Строка в PS представляет собой последовательность символов, заключённую в одинарные или двойные кавычки. У любого объекта строки есть набор свойств и методов, доступ к которым можно получить, поставив после этого объекта точку. Например, для данного случая есть свойство Length:
PS C:\> "Однажду в cтудёную зимнюю пору я из лесу вышел...".Length
49
C большими текстами, однако, не выйдет: консоль имеет ограничение по длине вставляемого текста. Можно конечно сохранить его в *.txt (но не *.doc) файл, считать содержимое и уже у него запросить длину... Однако конструкция выйдет уже сложнее. Что-то вроде
PS C:\> [io.file]::ReadAllText((Resolve-Path ".\fanfic.txt")).Length
72872
Посчитать же количество слов в тексте на PS - дело и вовсе зубодробительное. На случай наличия любопытных маньяков
PS C:\> $content = [io.file]::ReadAllText((Resolve-Path ".\fanfic.txt")).ToCharArray()
PS C:\> $lettersAndSpaces = $content | ? {([char]::IsLetter($_)) -or ($_ -eq [char]" ")}
PS C:\> (-join $lettersAndSpaces).Split(" ", [System.StringSplitOptions]::RemoveEmptyEntries).Length
10392
2. Сгенерировать строчку
Предположим, хочется в чатике вставить длиннющее "хахаха", а набивать руками лень. В PS оно генерируется легко и просто:
PS C:\> "ха" * 50
хахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахахах
ахахахахахахахахахаха
3. Скопировать строчку в буфер обмена
Как в любой консоли, в PS есть возможности копирования мышкой. Но иногда быстрее набрать с клавиатуры «| clip» - и предшествующее значение окажется в буфере обмена, терпеливо дожидаясь всем знакомого Ctrl + V.
PS C:\> "!" * 200 | clip
4. Произвести вычисления в килобайтах/мегабайтах/гигабайтах/терабайтах
В PS встроена поддержка рассчётов с указанными единицами измерений. Чтобы их провести достаточно воспользоваться предопределёнными суффиксами: KB, MB, GB, TB. Если в подобном выражении у числа суффикс не указан, PS считает, что речь идёт о байтах.
PS C:\> 1KB
1024
PS C:\> 1TB / 1MB
1048576
PS C:\> 123456/ 1KB
120,5625
PS C:\> 137 * 1GB / 1MB
140288
5. Провести рассчёты с датами
В Windows, безусловно, есть календарь и его для большинства случаев достаточно. Но что, если хочется странного, например, узнать, какой на какой день недели выпадет Новый Год в 2057 году? Это сколько же листать придётся?
В PS есть встроенный тип [datetime], который легко преобразовывается из строкового представления. И у объектов данного типа, естественно, есть много полезных свойств и методов.
PS C:\> ([datetime]"01.01.2057").DayOfWeek
Monday
Строчки парсятся из самых разных форматов, однако есть одно "но": Powershell - произведение иностранное, а на западе, как известно, принято вначале писать месяц, а потом день, а не наоборот, как у нас.
PS C:\> [datetime]"02-01-2057"
1 февраля 2057 г. 0:00:00
Может быть это как-то решается настройками региональных стандартов, но у меня на домашнем компе стоит всё русское, а даты PS всё равно понимает по-иностранному.
У типа данных [datetime] есть свойство now - текущий момент времени; объекты времён можно вычитать друг из друга при помощи знака "минус".
Например, вот так можно узнать, сколько же дней осталось до Международного Женского дня:
PS C:\> ([datetime]"03.08.2015" - [datetime]::now).Days
16
К объекту datetime так же можно прибавлять временные промежутки, при помощи целого набора методов AddDays/AddHours/AddMinutes/AddMonths. Скажем, чтобы рассчитать дату, на которую выпадает в этом (2015-м) году День Программиста можно сделать так:
PS C:\> ([datetime]"01.01.2015").AddDays(256 - 1)
13 сентября 2015 г. 0:00:00
6. Получить имя компьютера и другую информацию об окружении
В PS есть переменная $env, содержащая различную информацию о параметрах окружения. В частности, получить через неё имя компьютера можно так:
PS C:\> $env:computername
DVP-VAIO
Вывести список всего её содержимого можно так:
PS C:\> dir env:\
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
asl.log Destination=file
CLASSPATH .;C:\PROGRA~2\IBM\IBMDAT~1\java\db2jcc.jar;C:...
...
7. Найти нужный процесс
Процессы, безусловно, видны в TaskManager. И там же можно отсортировать их по имени, чтобы было удобно искать требуемый. Но что если целиком название процесса не известно, только его часть? В PS это можно сделать так:
PS C:\> Get-Process *pad*
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
60 7 1952 6080 71 0,16 7964 notepad
117 15 9824 16524 110 0,86 4736 notepad++
8. Сгенерировать GUID
PS C:\> [guid]::NewGuid()
Guid
----
78ccb35a-b91f-4fc4-bdf5-d0e431f68864
9. Преобразования в/из xml и работа с полученным объетом
PS C:\> $xml = [xml]"<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>"
PS C:\> $xml.note.from
Jani
PS C:\> $xml.note.from = "Janiffer"
PS C:\> $xml.OuterXml
<note><to>Tove</to><from>Janiffer</from><heading>Reminder</heading><body>Don'tforget me this weekend!</body></note>
В версиях, начиная с 3.0 есть так же команды для работы с JSON: ConvertFrom-Json и ConverTo-Json. Но у меня тут стоит, увы, устаревшая версия
так что я их только упомяну.
С хабром кстати не так всё просто. Один товарищ с работы получил туда приглашение, а публиковаться не может - для этого карму вначале надо заработать