Обязательно прочитайте предыдущие статьи в серии:
- Узнайте, как автоматизировать Windows с помощью PowerShell
- Обучение использованию командлетов в PowerShell
- Обучение использованию объектов в PowerShell
- Форматирование, фильтрация и сравнение обучения в PowerShell
- Научитесь использовать Remoting в PowerShell
- Использование PowerShell для получения информации о компьютере
- Работа с коллекциями в PowerShell
И оставайтесь настроенными для остальной части серии всю неделю.
переменные
Большинство языков программирования позволяют использовать переменные, которые являются просто контейнерами, которые содержат значения. В PowerShell у нас тоже есть переменные, и они очень просты в использовании. Вот как создать переменную с именем «FirstName» и присвоить ей значение «Тейлор».
$FirstName = “Taylor”
Первое, что большинство людей, похоже, спрашивают, почему мы помещаем знак доллара перед именем переменных, и на самом деле это очень хороший вопрос. Действительно, знак доллара - это лишь небольшой намек на оболочку, что мы хотим получить доступ к содержимому переменной (подумайте, что внутри контейнера), а не сам контейнер. В PowerShell имена переменных не включают знак доллара, а это означает, что в приведенном выше примере имя переменных фактически является «FirstName».
В PowerShell вы можете увидеть все переменные, которые вы создали в переменной PSDrive.
gci variable:
Remove-Item Variable:FirstName
Переменные не должны содержать один объект; вы можете так же легко хранить несколько объектов в переменной. Например, если вы хотите сохранить список запущенных процессов в переменной, вы можете просто назначить ему вывод Get-Process.
$Proc = Get-Process
Трюк для понимания этого заключается в том, чтобы помнить, что правая часть знака равенства всегда оценивается в первую очередь. Это означает, что вы можете иметь весь трубопровод с правой стороны, если хотите.
$CPUHogs = Get-Process | Sort CPU -Descending | select -First 3
Теперь переменная CPUHogs будет содержать три запущенных процесса с использованием большинства процессоров.
$CPUHogs.Kill()
Который убьет все три процесса в коллекции. Если вы хотите получить доступ к одному объекту в переменной, вам нужно рассматривать его как массив.
$CPUHogs[0]
Это даст вам первый объект в коллекции.
Не поймайте!
Переменные в PowerShell слабо типизированы по умолчанию, что означает, что они могут содержать любые данные, это, похоже, все время захватывает новых пользователей PowerShell!
$a = 10
$b = ‘20’
Итак, у нас есть две переменные: одна содержит строку, а другая - целое число. Итак, что произойдет, если вы их добавите? Это зависит от того, в каком порядке вы их добавите.
$a + $b = 30
В то время как
$b + $a = 2010
В первом примере первый операнд представляет собой целое число $ a, поэтому PowerShell думает, что вы пытаетесь выполнить математику и, следовательно, пытаетесь преобразовать любые другие операнды в целые числа. Однако во втором примере первый операнд представляет собой строку, поэтому PowerShell просто преобразует остальные операнды в строки и объединяет их. Более продвинутые сценаристы предотвращают этот вид gotcha, перебрасывая переменную на тот тип, который они ожидают.
[int]$Number = 5 [int]$Number = ‘5’
Вышеизложенное приведет к переменной Number, содержащей целочисленный объект со значением 5.
Вход и выход
Поскольку PowerShell предназначен для автоматизации работы, вам будет необходимо избегать предоставления пользователям информации, где это возможно. С учетом сказанного, там будут моменты, когда вы не можете этого избежать, и для тех случаев у нас есть командлет Read-Host. Использование его очень просто:
$FirstName = Read-Host –Prompt ‘Enter your first name’
Write-Output “How-To Geek Rocks!”