При переходе с bash на PowerShell часто возникают неудобства, связанные с незнанием, какие есть аналоги в пошике и как ими пользоваться. К примеру, лично мне очень нравится bash своей логикой. Вот нужно тебе из текстового файла найти только что-то определенное, и ты знаешь, что для этого нужно задействовать, скажем, cat и grep. А вот при написании подобного на пошике часто возникает полный ступор. И вроде вся логика понятна, и скрипт-то в одну строку, а как реализовать — неясно. Именно с этим и предлагаю разобраться.
 

Общие правила игры

Сперва давай разберемся с наиболее простым, но не менее важным — с тем, как работать с переменными. Скажем, если в bash для объявления переменной достаточно написать foo=1, то для PowerShell нужно добавить знак доллара — $foo=1. Для вывода значения переменной на экран можно воспользоваться универсальным echo или, если работаешь с пошиком, командлетом Write-Host. Длиннее? Да, безусловно, но при этом с помощью данного командлета можно весьма интересно управлять выводом:

Write-Host (2,4,6,8,10,12) -Separator "->" -ForegroundColor DarkMagenta -BackgroundColor White

К примеру, данный код выведет последовательность цифр в скобках, между цифрами поставит знак -> плюс раскрасит бэкграунд и сам текст. Конечно, для скрипта на коленке это не нужно, но вот для каждодневного отчета почему бы и нет.

Пример работы командлета Write-Host
Пример работы командлета Write-Host

Нужно что-либо сравнить? Для этого есть целая таблица, которая так или иначе знакома любому линуксоиду:

АргументТипОписание
eqEqualРавно
neNot equalНе равно
geGreater than or equalБольше или равно
gtGreater thanБольше
ltLess thanМеньше
leLess than or equalМеньше или равно
likeWildcard comparisonИспользование символов подстановки для поиска соответствия образцу.
Пример: "file.doc" -like "f*.do?"
notlikeWildcard comparisonИспользование символов подстановки для поиска несоответствия образцу.
Пример: "file.doc" -notlike "p*.doc"
matchRegular expression comparisonИспользование регулярных выражений для поиска соответствия образцу
notmatchRegular expression comparisonИспользование регулярных выражений для поиска несоответствия образцу
replaceReplace operatorЗаменяет часть или все значение слева от оператора
containsContainment operatorОпределяет, содержит ли значение слева от оператора значение справа. В отличие от предыдущих операторов результатом является булево значение.
Пример: 1,2,3 -contains 1
notcontainsContainment operatorОпределяет, что значение слева от оператора не содержит значения справа. Результат — булево значение.
Пример: 1,2,3 -notcontains 4

Для логических операторов это:

АргументОписание
andОба условия должны быть истинны, чтобы выражение было истинно.
Пример: (1 -eq 1) -and (2 -eq 2)
orОдно или оба условия должны быть истинны, чтобы выражение было истинно.
Пример: (1 -eq 1) -or (1 -eq 2)
xorОдно условие должно быть истинно, а второе должно иметь значение «ложь», чтобы выражение было истинно
notУказанные условия должны иметь значение «ложь», чтобы выражение было истинно.
Пример: -not (1 -eq 2)
!Указанное условие должно иметь значение «ложь», чтобы выражение было истинно.
Пример: ! (1 -eq 2)

Также будет полезно для типов:

АргументОписание
isЯвляется типом
isnotНе является типом
asКак тип, без ошибки, если возникает неудача преобразования

Если с операторами сравнения и логическими условиями все более-менее прозрачно, то вот с типом я бы рассмотрел простенький пример. Вот, скажем, нужно нам узнать среднее время ответа от сайта xakep.ru. Для этого нужно сделать серию пингов и высчитать среднее время ответа. Набросаем простой скрипт:

Write-Host `n "Waiting for test ..."$Avg = 0$Site = "www.xakep.ru"$PingSite = Test-Connection -Count 5 $Site$Avg = ($PingSite | Measure-Object ResponseTime -Average)$Calc = ($Avg.average) -as [int]Clear-HostWrite-Host "Average response time to $Site is $Calc ms"

Если использовать данный код без типа int, мы получим дробное значение, что нам не очень нужно.

Пример кода
Пример кода
 

Алиасы

Для упрощения работы с PowerShell можно использовать алиасы. Думаю, тебе будет интересно самому взглянуть на список актуальных алиасов в своей системе. Для этого нужно выполнить командлет Get-Alias.

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

Set-Alias -Name calc -value calc.exe

Теперь при вводе calc у нас будет запускаться калькулятор. Если хочется записать на алиас какую-нибудь команду с параметрами, то нужно использовать функцию

function AL01 {Test-Connection -Count 2 xakep.ru}Set-Alias ping AL01

При вызове нашего алиаса по имени ping мы сделаем два пинга до сервера xakep.ru. Чтобы удалить ненужный для нас алиас, существует команда

Remove-Item alias:ping

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

$profile | Format-List -Force

А протестировать на наличие в системе — командой

$profile | Format-List -Force | ForEach-Object (Test-Path _$)

Если в ответ возвращается False, то их просто нет. Создадим наш файл, к примеру по первому пути:

C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

и в него напишем наши алиасы:

function AL01 {Test-Connection -Count 2 xakep.ru}Set-Alias ping AL01

После сохранения и перезапуска пошик будет автоматически подгружать данный файл, и теперь настройки никуда не денутся. Стоит упомянуть и что по умолчанию в системе отключен запуск любых сценариев и, скорее всего, наш внешний файл будет забракован системой. Чтобы этого не произошло, давай посмотрим, что стоит в политике. Выполни в консоли PowerShell:

Get-ExecutionPolicy

Скорее всего, система вернет значение Restricted, что как раз означает запрет выполнения сценариев. Чтобы это обойти, выполни из-под администратора:

Set-ExecutionPolicy Unrestricted

После подтверждения сценарии будут запускаться без ошибок и наш файл тоже будет работать.

 

Погружаемся глубже

Теперь давай перейдем к наиболее востребованным тулзам «Линукса» и их аналогам в PowerShell. Начнем, как обычно, от простого к сложному.


Скачать:









Важно:


Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.





Заходи на mc.foxygame.ru:25565

Советуем прочитать