В PowerShell, как и в любом другом языке программирования есть переменные. В этой статье разберём особенности переменных в PowerShell, например все переменные это объекты и переменные имеют динамический тип. Для более подробной информации обратитесь к документации.

PowerShell переменные и их особенности

Переменные в PowerSHell, как и всё остальное — это объекты. Эту особенность тоже разберём в этой статье, но чуть ниже. Другой особенностью переменных PowerShell является то, что тип переменной зависит от её значения, например:

  • $foo = 1 — число;
  • $foo = 'one' — строка;
  • $foo = $true — логическая переменная.

Стоит усвоить что типы переменных в PowerShell — динамические, то есть зависят от значения переменной.

Все переменные начинаются со знака доллара ($). Если не указать знак доллара, то PowerShell подумает что вы вызываете Командлет а не Переменную. Чтобы вывести значение переменной нужно просто написать её название, а чтобы присвоить ей значение нужно использовать знак равно (=). Вот пример:

> $a = 5
> $a
5

В PowerSHell есть пользовательские и встроенные переменные. Выше в примере мы создали пользовательскую переменную a и присвоили ей значение 5. Встроенные переменные обычно настраивают работу самого PowerShell или показывают какую-то информацию. Некоторые встроенные переменные можно изменять, но есть те, которые изменять нельзя.

Пользовательские переменные

Присваивать значение переменной можно не только с помощью знака равенства, а ещё с помощью командлета Set-Variable. А смотреть на переменную можно с помощью Get-Variable. Например так:

> Set-Variable -Name a -Value 15
> Get-Variable -Name a
Name                           Value
----                           -----
a                              15

Если командлету Get-Variable не указать имя переменной, то будут выведены все встроенные и пользовательские переменные и их значения.

PS C:\Windows\system32> Get-Variable

Name                           Value
----                           -----
$                              a
?                              True
^                              Get-Variable
a                              15
args                           {}
ConfirmPreference              High

###вывод сократил###

Встроенные переменные

Встроенные переменные обычно не меняют, а используют для просмотра какой-то информации о системе. Сейчас рассмотрим некоторые из встроенных переменных PowerShell.

$null

Эта переменная ничего не возвращает. Может использоваться для создания переменной, без присвоения ей значения:

> $b = $null
> Get-Variable -Name b
Name                           Value
----                           -----
b
> Get-Variable -Name null
Name                           Value
----                           -----
null

$lastexitcode

Когда внешнее приложение, например ping.exe, завершает работу, оно заканчивается с кодом выхода. Этот код выхода приложения заносится в переменную $lastexitcode. Если код выхода равен нулю, значит программа выполнилась успешно, в противном случае код завершения может быть другим. Вот пример с утилитой ping:

> ping ya.ru

Обмен пакетами с ya.ru [87.250.250.242] с 32 байтами данных:
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55

Статистика Ping для 87.250.250.242:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 15мсек, Максимальное = 15 мсек, Среднее = 15 мсек

> $LASTEXITCODE
0

> ping qwerasdf.opt
При проверке связи не удалось обнаружить узел qwerasdf.opt.
Проверьте имя узла и повторите попытку.

> $LASTEXITCODE
1

В переменную $lastexitcode записывается код выхода последнего приложения. Поэтому при завершении другого приложения её значение может измениться.

$true и $false

Переменная $true всегда содержит значение true логического типа данных. Тоже самое относится и к переменной $false — содержит false логического типа.

$MaximumHistoryCount

В переменной $MaximumHistoryCount содержится максимальное число строк для хранения истории команд. Значение этой переменной можно менять, а по умолчанию оно равно 4096.

> $MaximumHistoryCount
4096
> $MaximumHistoryCount = 200
> $MaximumHistoryCount
200

$^

В переменной $^ хранится имя последней команды, например:

> ping -n 1 8.8.8.8
Обмен пакетами с 8.8.8.8 по с 32 байтами данных:
Ответ от 8.8.8.8: число байт=32 время=23мс TTL=110
Статистика Ping для 8.8.8.8:
    Пакетов: отправлено = 1, получено = 1, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 23мсек, Максимальное = 23 мсек, Среднее = 23 мсек

> $^
ping

Типы переменных

Тип Bool — логический тип переменной, который может содержать либо true, либо false.

Тип Int32 — 32 разрядное число со знаком, то есть число из диапазона от -2147483648 до +2147483647. Если в этот диапазон вы не укладываетесь, то можно использовать тип Int64, который имеет диапазон намного больше от –9223372036854775808 до 9223372036854775807.

Тип Double — числа с плавающей точкой. Другой тип для чисел с плавающей точно — это Float. В подробности этих типов я вдаваться не буду, просто запомните что их можно применять для десятичных чисел и что они могут быть не точными.

Для строк есть тип String. Строки всегда заключаются в одинарные или двойные кавычки. При отсутствие кавычек PowerShell поймет строку как Командлет и выдаст ошибку, вот пример:

> $color = blue
blue : Имя "blue" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:10
+ $color = blue
+          ~~~~
    + CategoryInfo          : ObjectNotFound: (blue:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Просмотр типа переменной

Так как переменные это объекты, то у них есть некоторые методы. Метод GetType() возвращает тип переменной и некоторую дополнительную информацию. А есть указать GetType().Name — то в выводе будет только тип переменной. Вот пример:

> $a=5
> $b=5.25
> $color='blue'

> $a.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

> $b.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Double                                   System.ValueType

> $color.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

> $color.GetType().Name
String

Вставка в строку переменной

В строку можно вставить значение переменной, для этого нужно использовать двойные кавычки вместо одинарных. Вот пример:

> $name='alex'

> $hello='Hello $name'
> $hello
Hello $name

> $hello="Hello $name"
> $hello
Hello alex

Переменные это объекты

Так как переменная это объект, то мы можем посмотреть на все свойства объекта. Это делается с помощью командлета Select-Object таким образом:

> Select-Object -InputObject $color -Property *

Length
------
     4

В место звездочки, в примере выше, вы можете написать название свойства, а звёздочка означает что нужно вывести все свойства этого объекта.

Строка имеет только одно свойство — Lenght, это длина строки. Так как переменная $color содержит значение blue, то длина строки равняется 4.

Использовать атрибуты (свойства) объекта можно таким образом:

> $color.Length
4

Чтобы посмотреть методы объекта применяется другой командлет — Get-Member. Применяется он таким образом:

> Get-Member -InputObject $color


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone(), System.Object ICloneable.Clone()
CompareTo        Method                int CompareTo(System.Object value), int CompareTo(string strB), int 
                                       IComparab...
Contains         Method                bool Contains(string value)
CopyTo           Method                void CopyTo(int sourceIndex, char[] destination, int destinationIndex, 
                                       int co...
EndsWith         Method                bool EndsWith(string value), bool EndsWith(string value, 
                                       System.StringCompari...
Equals           Method                bool Equals(System.Object obj), bool Equals(string value), bool 
                                       Equals(string...
### пропустил некоторый вывод###

Length           Property              int Length {get;}

Как видим командлет Get-Member показывает и свойства (атрибуты) объекта и его методы.

Оказывается со строковым объектом связано очень много методов. Количество методов и свойств зависит от его родительского класса.

Вот так можно использовать методы объекта:

> $color.Remove(2)
bl
> $color.Remove(3)
blu
> $color
blue

Метод Remove() перед выводом удаляет из строки всё начиная с номера указанного символа. В примере выше мы вначале удалили всё начиная со 2-ого символа, затем всё начиная с 3-его, затем убедились что значение в переменной не поменялось. Кстати, в строке отсчет символов начинается с нуля.

Сводка
PowerShell переменные
Имя статьи
PowerShell переменные
Описание
В PowerShell, как и в любом другом языке программирования есть переменные. В этой статье разберём особенности переменных в PowerShell

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *