Powershell тип переменной: Jump Start в PowerShell (часть II) / Хабр

Содержание

Jump Start в PowerShell (часть II) / Хабр

Кто, если не ты? Когда, если не сейчас?

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

В этой части мы разберёмся с переменными, узнаем, что они за типы и как к ним обращаться, как их сравнивать и выводить всевозможными способами. Обязательно разберёмся с циклами и напишем несколько функций.

← Перейти к I части

Введение

Начать я хочу с ответов на вопросы, возникшие в первом нашем с Вами Jump Start’е:

В чём огромные возможности PowerShell? Зачем мне его изучать?

Каждый под фразой «огромные возможности» может понимать что-то своё.

Если бы мне пришлось охарактеризовать PowerShell в трёх словах, я бы сказал: это среда упрощающая администрирование, помогающая создать инструменты для автоматизации и управления.

Изучить PowerShell точно стоит, если ты администрируешь Windows Server и серверное ПО от Microsoft. Возьмём, к примеру, один из популярнейших продуктов Microsoft Exchange Server — и тут же натыкаешься на PowerShell консоль Exchange Management Shell.

Зная PoSh ты без труда сможешь сделать любую нужную выгрузку данных, настроить контроль за любыми процессами системы, отправлять отчёты, создавать пользователей, решать их проблемы…

Я не занимаюсь администрированием, что тогда?

Это можно сравнить с тем, как люди совершенно разных профессий увлекаются созданием web-сайтов. Вроде им это очень и не надо, но они этим занимаются. Ради собственного развития, развлечения или удовольствия.

Вы студент? Напишите себе своё первое приложение, которое будет решать квадратное уравнение.

Или, например, изучите парсинг и сделайте своё приложение для скачивания музыки или красивых видео из youtube.

Всё зависит от тебя и твоей фантазии. Посмотрите сюда, PowerShell можно даже научить разговаривать.

Можно же просто посмотреть видео на MVA!

Да, я совершенно согласен с Вами — это может быть эффективнее.

Правда, не каждый имеет время на просмотр 12-15 часового курса и не каждый может так воспринимать информацию.

Здесь я пробую дать базовые знания с которыми можно будет успешно продолжить развивать свои умения безгранично дальше.

Переменные
  • Переменная в PowerShell начинается со знака $ (в Евросоюзе со знака €) и в названии может содержать любые буквы, цифры и символ подчёркивания.
  • Чтобы назначить переменной значение, достаточно его ей присвоить знаком «=«. Чтобы вывести значение переменной, можно просто написать эту переменную. Вывод информации мы разберём по тексту ниже.
    $var = 619
    $var
    

  • Над числами можно производить арифметические операции, строки можно складывать. Если к строке прибавить число, число автоматически преобразуется в строку.
    $a = 1
    $b = 2
    $c = $a + $b
    $c   #c = 3
    $str = "Хабра"
    $str = $str + "хабр"
    $str   #str = Хабрахабр 
    $str = $str + 2014
    $str   #str = Хабрахабр2014
    
  • Если нам надо узнать, какой тип имеет та или иная переменная, можно воспользоваться методом GetType()
    $s = "Это строка?"
    $s.GetType().FullName
    

  • Тип переменной PowerShell определяет автоматически или его можно назначить вручную.
    $var = "one"
    [string]$var = "one"
    

    PowerShell использует типы данных Microsoft .NET Framework. Рассмотрим основные:













    Тип / .NET классОписание
    [string]

    System.String

    Строка

    $var = "one"
    

    [char]

    System.Char

    Символ

    $var = [char]0x263b
    

    [bool]

    System.Boolean

    Булево. Может иметь значение $true или $false.

    $bvar = $true
    

    [int]

    System.Int32

    32-разрядное целое число

    $i = 123456789 
    

    [long]

    System.Int64

    64-разрядное целое число

    $long_var = 12345678910
    

    [decimal]

    System.Decimal

    128 битное десятичное число. Буква d на конце числа обязательна

    $dec_var = 12345.6789d
    

    [double]

    System.Double

    8-байтное десятичное число с плавающей точкой

    [double]$double_var = 12345.6789
    

    [single]

    System.Single

    32 битное число с плавающей точкой

    [single]$var = 123456789.101112
    

    [DateTime]

    System.DateTime

    Переменная даты и времени.

    $dt_var = Get-Date
    

    [array]

    System.Object[]

    Массив. Индекс элементов массива начинается с 0 — чтобы обратиться к первому элементу массива $mas, следует написать $mas[0].

    $mas = "one", "two", "three"; 
    

    Для добавления элемента к массиву, можно записать

    $mas = $mas + "four"
    

    Каждый элемент массива может иметь свой тип

    $mas[4] = 1
    
    [hashtable]

    System.Collections.Hashtable

    Хеш-таблицы. Различие между хэш-таблицами и массивами в том, что в массивах используются индексы, а в хэш-таблице именованные ключи. Хеш-таблицы строятся по принципу: @{ ключ = «значение» }

    $ht = @{odin="one"; dva="two"; tri="three"} 
    

    Чтобы добавить элемент к хеш-таблице, можно или присвоить ей тот ключ, которого ещё нет, или воспользоваться методом Add(). Если присваивание делать к существующему ключу — значение ключа изменится на присваиваемое. Для удаления элемента из хеш-таблицы есть метод Remove().

    $ht.Add("chetyre", "four")
    $ht. pyat = "five"
    $ht.Remove("dva")
    

Вы наверняка уже поняли, что в переменную можно записать не только какое-то определённое значение и заметили в таблице класс System.Object[]. В переменную так же можно записать вывод любого командлета.

Разберём боевую задачку: требуется узнать IP-адрес и MAC-адрес нескольких компьютеров в сети. Имена компьютеров domain-comp1, domain-comp2. Вариант решения под спойлером:

Показать код

$MAC = Get-WmiObject -ComputerName domain-comp1, domain-comp2 -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=True  |  Select-Object -Property * | SELECT PSComputerName, @{Name="IPAddress";Expression={$_.IPAddress.get(0)}}, MACAddress, Description
$MAC

Что происходит:


Мы записываем в переменную $MAC результат от выполнение командлета Get-WmiObject, с помощью которого передаём WMI запрос на компьютеры, указанные в параметре -computername и возвращаем нужную нам информацию из класса Win32_NetworkAdapterConfiguration.

Обратите внимание, если надо получить IP-адрес и MAC-адрес текущего компьютера, то вместо имён компьютеров, параметру -computername мы передадим точку. И, давайте, в следующим примере сохраним результат в файл D:\comp_mac_ip.csv:

$MAC = Get-WmiObject -ComputerName . -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=True  |  Select-Object -Property * | SELECT PSComputerName, @{Name="IPAddress";Expression={$_.IPAddress.get(0)}}, MACAddress, Description
$MAC | Export-Csv D:comp_ip_mac.csv -Encoding UTF8
Область действия переменных

Область действия переменной в PowerShell может быть либо локальной, либо глобальной. По умолчанию переменная имеет локальную область действия и ограничена областью действия, например, доступна только в функции или только в текущем сценарии. Глобальная переменная действует во всём текущем сеансе PowerShell. Для того, чтобы обозначить глобальную переменную, достаточно написать следующую конструкцию: $Global: переменная = значение

$Global:var = 12

И ещё фишка по теме переменных… Как-то, обсуждая с коллегой 1С и его русскоязычную среду программирования, задались вопросом:

— Интересно, а если в PowerShell задать функцию или переменную на русском языке, она будет работать?

— По идее должно работать, это же тоже символы.

И да, действительно:

function привет() { "Привет, $env:USERNAME. Может не стоит писать на русском?"
                    Start-Sleep 3
                    "Открыть Хабр?"
                    }
function открывай() { & "C:\Program Files\Internet Explorer\iexplore.exe" http://habrahabr.ru/post/242425/ }

Операторы сравнения и логические операторы

Операторы сравнения и логические операторы проверяют равенство или соответствие между двумя значениями.

  • При выполнении условия, конструкция сравнения всегда возвращает логическое значение $true или $false, если условие ложь.

В таблице ниже приведены операторы сравнения:














ОператорОписаниеПример
-eqEqual / Равно (=)
$var = "619"
$var -eq 123   #$false

-neNot equal / Не равно (<>)
$var = "619"
$var -ne 123   #$true
-gtGreater than / Больше (>)
$var = "619"
$var -gt 123   #$true
-geGreater than or equal / Больше или равно (>=)
$var = "619"
$var -ge 123   #$true
-ltLess than / Меньше (<)
$var = "619"
$var -lt 123   #$false
-leLess than or equal / Меньше или равно (<=)
$var = "619"
$var -le 123   #$false
-likeСравнение с учётом символа подстановки
"Habra" -like "habr*"   #true
-notlikeСравнение с учётом не соответствия символа подстановки
"Habra" -notlike "habr*"   #false
-containsСодержит ли значение слева значение справа
1, 2, 3, 4, 5 -contains 3   #$true
-notcontainsЕсли значение слева не содержит значение справа, получим истину
1, 2, 3, 4, 5 -notcontains 3   #$false
-matchИспользование регулярных выражений для поиска соответствия образцу
$str = "http://habrahabr. http://(\S+)+(.com)$"   #true
-replaceЗаменяет часть или все значение слева от оператора
"Microhabr" -replace "Micro","Habra"   #Habrahabr

Разберём пример. В примере мы формируем путь до возможного профиля пользователя на удалённом компьютере в зависимости от операционной системы. Решение под спойлером:

Показать код

#Путь к профилю на удалённом компьютере
Function UProfile ($UCompName, $ULogin) {
        [string]$CompOS = Get-WmiObject -ComputerName $UCompName -Class Win32_OperatingSystem | SELECT Caption   #Получаем заголовок операционной системы компьютера
    if ($CompOS -match "Windows 7") {   #Если в заголовке содержится "Windows 7"
        [string]$LinkUserProfile = "\\$UCompName\d$\users\$ULogin"   #Получаем такой путь
        $LinkUserProfile  
    } elseif ($CompOS -match "Windows XP") {   #Если в заголовке содержится "Windows XP"
        [string]$LinkUserProfile = "\\$UCompName\d$\Documents and Settings\$ULogin"   #Получаем такой путь
        $LinkUserProfile        
    }
}
UProfile domain-comp1 Administrator   #функция имя-компьютера логин-пользователя

Да, здесь мы не проверяем, существует ли профиль. Но можно и проверить. Для этого добавим ещё одно условие, в котором будем проверять командлетом Test-Path существование пути:

#Путь к профилю на удалённом компьютере
Function UProfile ($UCompName, $ULogin) {
        [string]$CompOS = Get-WmiObject -ComputerName $UCompName -Class Win32_OperatingSystem | SELECT Caption   #Получаем заголовок операционной системы компьютера
    if ($CompOS -match "Windows 7") {   #Если в заголовке содержится "Windows 7"
        [string]$LinkUserProfile = "\\$UCompName\d$\users\$ULogin"   #Получаем такой путь
    } elseif ($CompOS -match "Windows XP") {   #Если в заголовке содержится "Windows XP"
        [string]$LinkUserProfile = "\\$UCompName\d$\Documents and Settings\$ULogin"   #Получаем такой путь    
    }
    if (Test-Path $LinkUserProfile) { $LinkUserProfile } else { "Профиль $ULogin не существует на компьютере $UCompName" }   #Проверяем существование профиля
}
UProfile domain-comp1 Administrator   #функция имя-компьютера логин-пользователя

Кстати, регулярные выражение в PowerShell очень хорошо описал Xaegr в своём блоге. Стоит того, чтобы потратить пару часов на прочтение и постичь умение написания regular expressions.





ОператорОписаниеПример
-and Логическое и
("Строка" -eq "Строка") -and (619 -eq 619)   #$true
-or Логическое или
("Строка" -eq "Строка") -or (619 -eq 123)   #$true
-not Логическое не
-not (123 -gt 324)   #$true

или

!(123 -gt 324)   #$true
Пара слов про

ifelseif и else

if ( условие1-верно ) { выполняем-код }   #если условие 1 верно, выполняем код, если нет - идём дальше
elseif ( условие2-верно ) { выполняем-код }   #необязательное условие: иначе, если условие 2 верно, выполняем код
else { выполняем-код }  #необязательное условие: если прошлое условие не верно, выполняем код

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

Если находим elseif — проверяем новое условие и так же, в случае успеха, выполняем код, иначе, снова смотрим, есть ли продолжение в виде elseif или else.

Если условие выполняется, то код выполняется и ветка elseif или else пропускается.

$str = ""
if ( 1 -gt 2 ) { $str = "Апельсин" } 
elseif ( $str -eq "Апельсин" ) { $str } 
else { $str = "Яблоко"; $str } 

Ответ

Вывод информации

Рассмотрим несколько основных вариантов вывода информации на экран:

  • Запись в файл, используя Out-File
    $str = "Hello Habr!"
    $str | Out-File D:\out_test1.txt
    


    или, как мы говорили в I части, использовать знак «>«

    $str = "Hello Habr!"
    $str > D:\out_test2.txt
    

  • Экспорт данных в . csv файл, используя Export-Csv
    $p = Get-Process
    $p | SELECT Name, Path | Export-Csv -Path D:\out_test3.csv
    

  • Запись в файл HTML, используя ConvertTo-Html
    $h = Get-Process
    $h | ConvertTo-Html -Property Name, Path > D:\out_test4.html
    & D:\out_test4.html   #Откроем файле после формирования
    

    Работать с HTML выводом на самом деле очень приятно. Имея навыки web-программирования можно добавить стилей и на выходе получить очень симпатичные отчёты.

Прочитать файл нам поможет уже знакомый нам командлет Get-Content

Get-Content D:\out_test1.txt

Циклы


Циклы в PowerShell мало чем отличаются от циклов в других языках. Почти всё как и везде:

Do While


Делать до тех пор, пока условие верно

$x = 10
do
{
    $x
    $x = $x - 1    
}
while ($x -gt 0)
Do Until


Цикл, который повторяет набор команд, пока выполняется условие

$x = 0
do
{
    $x
    $x = $x + 1    
}
until ($x -gt 10)
For


Цикл, который повторяет одинаковые шаги определённое количество раз

for ($i = 0; $i -lt 10; $i++)
{ 
    $i
}
ForEach


Цикл по коллекции объектов

$collection = "Имя-Компьютера1", "Имя-Компьютера2", "Имя-Компьютера3"
foreach ($item in $collection)
{
    $item 
}
Пишем функции

Например, функция для получения квадрата числа, на PowerShell будет выглядеть так:

function sqr ($a)
     {
      return $a * $a
     }
sqr 2   #Результат: 4

И на последок, пример функции, которая поможет нам выполнять транслитерацию. В этом примере как раз всё то, что мы сегодня рассматривали:

Показать код

#Транслитерация
function Translit ([string]$inString)
{
    $Translit = @{    #Создаём хеш-таблицу соответствия символов
    [char]'а' = "a"
    [char]'А' = "A"
    [char]'б' = "b"
    [char]'Б' = "B"
    [char]'в' = "v"
    [char]'В' = "V"
    [char]'г' = "g"
    [char]'Г' = "G"
    [char]'д' = "d"
    [char]'Д' = "D"
    [char]'е' = "e"
    [char]'Е' = "E"
    [char]'ё' = "yo"
    [char]'Ё' = "Yo"
    [char]'ж' = "zh"
    [char]'Ж' = "Zh"
    [char]'з' = "z"
    [char]'З' = "Z"
    [char]'и' = "i"
    [char]'И' = "I"
    [char]'й' = "j"
    [char]'Й' = "J"
    [char]'к' = "k"
    [char]'К' = "K"
    [char]'л' = "l"
    [char]'Л' = "L"
    [char]'м' = "m"
    [char]'М' = "M"
    [char]'н' = "n"
    [char]'Н' = "N"
    [char]'о' = "o"
    [char]'О' = "O"
    [char]'п' = "p"
    [char]'П' = "P"
    [char]'р' = "r"
    [char]'Р' = "R"
    [char]'с' = "s"
    [char]'С' = "S"
    [char]'т' = "t"
    [char]'Т' = "T"
    [char]'у' = "u"
    [char]'У' = "U"
    [char]'ф' = "f"
    [char]'Ф' = "F"
    [char]'х' = "h"
    [char]'Х' = "H"
    [char]'ц' = "c"
    [char]'Ц' = "C"
    [char]'ч' = "ch"
    [char]'Ч' = "Ch"
    [char]'ш' = "sh"
    [char]'Ш' = "Sh"
    [char]'щ' = "sch"
    [char]'Щ' = "Sch"
    [char]'ъ' = ""
    [char]'Ъ' = ""
    [char]'ы' = "y"
    [char]'Ы' = "Y"
    [char]'ь' = ""
    [char]'Ь' = ""
    [char]'э' = "e"
    [char]'Э' = "E"
    [char]'ю' = "yu"
    [char]'Ю' = "Yu"
    [char]'я' = "ya"
    [char]'Я' = "Ya"
    }
    $TranslitText = ""
    foreach ($CHR in $inCHR = $inString. ToCharArray())
        {
        if ($Translit[$CHR] -cne $Null) 
            { $TranslitText += $Translit[$CHR] }   #аналог записи $TranslitText = $TranslitText + $Translit[$CHR] 
        else
            { $TranslitText += $CHR }
        }
    return $TranslitText
}
Translit Хабрахабр   #Вывод: Habrahabr

Послесловие

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

Сохраняй спокойствие и учи PowerShell.

Продолжение следует…
Дополнительная информация
  • Jump Start в PowerShell (часть I);
  • Скачать PowerShell v.5 бесплатно без регистрации;
  • Замечательный курс на MVA: Расширенные возможности и написание скриптов в PowerShell 3.0 (Jump Start). Мой совет — посмотрите первые 3 блока, окунитесь в язык, попробуйте повыполнять какие-нибудь задачи и через недельку смотрите оставшиеся блоки. Русские субтитры;
  • Видео в тему на TechDays;
    Галерея скриптов PowerShell на Technet;
    Блог разработчиков PowerShell.

сведения о переменных — PowerShell


  • Статья



Краткое описание

Описывает, как переменные хранят значения, которые можно использовать в PowerShell.

Подробное описание

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

Переменная — это единица памяти, в которой хранятся значения. В PowerShell переменные представлены текстовыми строками, начинающимися с знака доллара ($), например $a, $processили $my_var.

Имена переменных не чувствительны к регистру и могут включать пробелы и специальные символы. Но имена переменных, включающие специальные символы и пробелы, трудно использовать и следует избегать. Дополнительные сведения см. в разделе «Имена переменных», включающие специальные символы.

В PowerShell существует несколько различных типов переменных.

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

  • Автоматические переменные: автоматические переменные хранят состояние PowerShell. Эти переменные создаются с помощью PowerShell, и PowerShell изменяет их значения в соответствии с требованиями к их точности. Пользователи не могут изменить значение этих переменных. Например, $PSHOME переменная сохраняет путь к каталогу установки PowerShell.

    Дополнительные сведения, список и описание автоматических переменных см. в about_Automatic_Variables.

  • Переменные предпочтения: переменные предпочтения хранят пользовательские настройки для PowerShell. Эти переменные создаются с помощью PowerShell и заполняются значениями по умолчанию. Пользователи могут изменять значения этих переменных. Например, $MaximumHistoryCount переменная определяет максимальное количество записей в журнале сеансов.

    Дополнительные сведения, список и описание переменных предпочтения см. в about_Preference_Variables.

Работа с переменными

Чтобы создать новую переменную, используйте инструкцию присваивания, чтобы назначить значение переменной. Перед использованием этой переменной не нужно объявлять ее. Значение по умолчанию для всех переменных .$null

Чтобы получить список всех переменных в сеансе PowerShell, введите Get-Variable. Имена переменных отображаются без предыдущего знака доллара ($), используемого для ссылки на переменные.

Пример:

$MyVariable = 1, 2, 3
$Path = "C:\Windows\System32"

Переменные полезны для хранения результатов команд.

Пример:

$Processes = Get-Process
$Today = (Get-Date).DateTime

Чтобы отобразить значение переменной, введите имя переменной, предшествующее знаку доллара ($).

Пример:

$MyVariable
1
2
3
$Today
Tuesday, September 3, 2019 09:46:46

Чтобы изменить значение переменной, назначьте новое значение переменной.

В следующих примерах отображается значение переменной $MyVariable , изменяется значение переменной, а затем отображается новое значение.

$MyVariable = 1, 2, 3
$MyVariable
1
2
3
$MyVariable = "The green cat."
$MyVariable
The green cat.

Чтобы удалить значение переменной, используйте Clear-Variable командлет или измените значение $nullна .

Clear-Variable -Name MyVariable
$MyVariable = $null

Чтобы удалить переменную, используйте Remove-Variable или Remove-Item.

Remove-Variable -Name MyVariable
Remove-Item -Path Variable:\MyVariable

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

$a = $b = $c = 0

В следующем примере несколько значений назначаются нескольким переменным.

$i,$j,$k = 10, "red", $true    # $i is 10, $j is "red", $k is True
$i,$j = 10, "red", $true       # $i is 10, $j is [object[]], Length 2

Дополнительные сведения см. в разделе «Назначение нескольких переменных » about_Assignment_Operators.

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

Можно хранить любой тип объекта в переменной, включая целые числа, строки, массивы и хэш-таблицы. Объекты, представляющие процессы, службы, журналы событий и компьютеры.

Переменные PowerShell слабо типизированные, что означает, что они не ограничиваются определенным типом объекта. Одна переменная может даже содержать коллекцию или массив различных типов объектов одновременно.

Тип данных переменной определяется типами .NET значений переменной. Чтобы просмотреть тип объекта переменной, используйте Get-Member.

Пример:

$a = 12                         # System.Int32
$a = "Word"                     # System.String
$a = 12, "Word"                 # array of System.Int32, System.String
$a = Get-ChildItem C:\Windows   # FileInfo and DirectoryInfo types

Можно использовать атрибут типа и нотацию приведения, чтобы убедиться, что переменная может содержать только определенные типы объектов или объекты, которые можно преобразовать в этот тип. При попытке назначить значение другого типа PowerShell пытается преобразовать значение в его тип. Если тип не удается преобразовать, инструкция присваивания завершается ошибкой.

Чтобы использовать нотацию приведения, введите имя типа, заключенное в квадратные скобки, перед именем переменной (слева от оператора присваивания). В следующем примере создается переменная $number , которая может содержать только целые числа, переменную, $words которая может содержать только строки и $dates переменную, которая может содержать только объекты DateTime .

[int]$number = 8
$number = "12345"  # The string is converted to an integer.
$number = "Hello"
Cannot convert value "Hello" to type "System.Int32". Error: "Input string was
 not in a correct format."
At line:1 char:1
+ $number = "Hello"
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo          : MetadataError: (:) [],
    ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[string]$words = "Hello"
$words = 2       # The integer is converted to a string.
$words += 10     # The plus (+) sign concatenates the strings.
$words
210
[datetime] $dates = "09/12/91"  # The string is converted to a DateTime object.
$dates
Thursday, September 12, 1991 00:00:00
$dates = 10    # The integer is converted to a DateTime object. 
$dates
Monday, January 1, 0001 00:00:00

Использование переменных в командах и выражениях

Чтобы использовать переменную в команде или выражении, введите имя переменной перед знаком доллара ($).

Если имя переменной и знак доллара не заключены в кавычки или если они заключены в двойные кавычки ("), значение переменной используется в команде или выражении.

Если имя переменной и знак доллара заключены в одинарные кавычки (') знак, в выражении используется имя переменной.

Дополнительные сведения об использовании кавычек в PowerShell см. в about_Quoting_Rules.

В этом примере возвращается значение переменной $PROFILE , которая является путем к файлу профиля пользователя PowerShell в консоли PowerShell.

$PROFILE
C:\Users\User01\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

В этом примере показаны две команды, которые могут открыть профиль PowerShell в notepad. exe. В примере с двойными кавычками (") используется значение переменной.

notepad $PROFILE
notepad "$PROFILE"

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

'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.

Имена переменных, включающие специальные символы

Имена переменных начинаются с знака доллара ($) и могут включать буквенно-цифровые символы и специальные символы. Длина имени переменной ограничена только доступной памятью.

Рекомендуется, чтобы имена переменных включали только буквенно-цифровые символы и символ подчеркивания (_). Имена переменных, включающие пробелы и другие специальные символы, трудно использовать и следует избегать.

Имена буквенно-цифровых переменных могут содержать следующие символы:

  • Символы Юникода из этих категорий: Lu, Ll, Lt, Lm, Lo или Nd.
  • Символ подчеркивания (_).
  • Знак вопроса (?)

В следующем списке содержатся описания категорий Юникода. Дополнительные сведения см. в разделе UnicodeCategory.

  • Lu — UppercaseLetter
  • Ll — LowercaseLetter
  • Lt — TitlecaseLetter
  • Lm — ModifierLetter
  • Lo — OtherLetter
  • Nd — DecimalDigitNumber

Чтобы создать или отобразить имя переменной, включающее пробелы или специальные символы, заключите имя переменной с фигурными скобками ({}) символами.
Фигурные скобки направляют PowerShell для интерпретации символов имени переменной как литералы.

Имена специальных переменных символов могут содержать следующие символы:

  • Любой символ Юникода со следующими исключениями:
    • Закрывающая фигурная скобка () (}U+007D).
    • Символ обратной черты () (`U+0060). и $_ содержащие буквенно-цифровые и специальные символы. Дополнительные сведения см. в статье about_Automatic_Variables.

      Например, следующая команда создает переменную с именем save-items. Фигурные скобки ({}) необходимы, так как имя переменной включает специальный символ дефиса (-).

      ${save-items} = "a", "b", "c"
      ${save-items}
      
      a
      b
      c
      

      Следующая команда возвращает дочерние элементы в каталоге, представленном переменной ProgramFiles(x86) среды.

      Get-ChildItem ${env:ProgramFiles(x86)}
      

      Чтобы ссылаться на имя переменной, включающую фигурные скобки, заключите имя переменной в фигурные скобки и используйте символ обратного ввода для экранирования фигурных скобок. Например, чтобы создать переменную именованного this{value}is типа:

      ${this`{value`}is} = "This variable name uses braces and backticks."
      ${this`{value`}is}
      
      This variable name uses braces and backticks. 
      

      Переменные и область

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

      Например, переменная, созданная в функции, доступна только в этой функции. Переменная, созданная в скрипте, доступна только в скрипте. Если добавить в скрипт точку источника, переменная добавляется в текущую область. Дополнительные сведения см. в about_Scopes.

      Модификатор области можно использовать для изменения области по умолчанию переменной. Следующее выражение создает переменную с именем Computers. Переменная имеет глобальную область, даже если она создается в скрипте или функции.

      $Global:Computers = "Server01"
      

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

      Дополнительные сведения см. в about_Remote_Variables.

      Сохранение переменных

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

      Чтобы создать переменную в каждом запущенном сеансе PowerShell, добавьте ее в профиль PowerShell.

      Например, чтобы изменить значение переменной $VerbosePreference в каждом сеансе PowerShell, добавьте следующую команду в профиль PowerShell.

      $VerbosePreference = "Continue"
      

      Эту команду можно добавить в профиль PowerShell, открыв $PROFILE файл в текстовом редакторе, например notepad.exe. Дополнительные сведения о профилях PowerShell см. в about_Profiles.

      Переменная: диск

      Поставщик переменных PowerShell создает Variable: диск, который выглядит и действует как диск файловой системы, но содержит переменные в сеансе и их значения.

      Чтобы изменить Variable: диск, используйте следующую команду:

      Set-Location Variable:
      

      Чтобы получить список элементов и переменных на Variable: диске, используйте Get-Item командлеты или Get-ChildItem командлеты.

      Get-ChildItem Variable:
      

      Чтобы получить значение определенной переменной, используйте нотацию файловой системы, чтобы указать имя диска и имя переменной. Например, чтобы получить автоматическую $PSCulture переменную, используйте следующую команду.

      Get-Item Variable:\PSCulture
      
      Name                           Value
      ----                           -----
      PSCulture                      en-US
      

      Чтобы отобразить дополнительные сведения о Variable: диске и поставщике переменных PowerShell, введите:

      Get-Help Variable
      

      Синтаксис переменных с путями поставщика

      Вы можете префиксить путь поставщика с помощью знака доллара ($) и получить доступ к содержимому любого поставщика, реализующего интерфейс IContentCmdletProvider .

      Следующие встроенные поставщики PowerShell поддерживают эту нотацию:

      • about_Environment_Provider
      • about_Variable_Provider
      • about_Function_Provider
      • about_Alias_Provider

      Командлеты переменной

      PowerShell включает набор командлетов, предназначенных для управления переменными.

      Чтобы получить список командлетов, введите:

      Get-Command -Noun Variable
      

      Чтобы получить справку по конкретному командлету, введите:

      Get-Help <cmdlet-name>
      
      Имя командлетаОписание
      Clear-VariableУдаляет значение переменной.
      Get-VariableПолучает переменные в текущей консоли.
      New-VariableСоздает новую переменную.
      Remove-VariableУдаляет переменную и ее значение.
      Set-VariableИзменяет значение переменной.

      См. также

      • about_Automatic_Variables
      • about_Environment_Variables
      • about_Preference_Variables
      • about_Profiles
      • about_Quoting_Rules
      • about_Remote_Variables
      • about_Scopes

      о переменных — PowerShell | Microsoft Learn

      • Статья

      Краткое описание

      Описывает, как переменные хранят значения, которые можно использовать в PowerShell.

      Подробное описание

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

      Переменная — это единица памяти, в которой хранятся значения. В PowerShell,
      переменные представлены текстовыми строками, начинающимися со знака доллара ( $ ),
      например, $a , $process или $my_var .

      Имена переменных не чувствительны к регистру и могут содержать пробелы и специальные
      персонажи. Но имена переменных, содержащие специальные символы и пробелы,
      сложны в использовании и их следует избегать. Для получения дополнительной информации см.
      Имена переменных, содержащие специальные символы.

      В PowerShell существует несколько различных типов переменных.

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

      • Автоматические переменные: автоматические переменные сохраняют состояние PowerShell. Эти
        переменные создаются PowerShell, и PowerShell изменяет их значения по мере
        требуется для поддержания их точности. Пользователи не могут изменить значение этих
        переменные. Например, переменная $PSHOME хранит путь к
        Каталог установки PowerShell.

        Для получения дополнительной информации, списка и описания автоматических переменных см.
        см. about_Automatic_Variables.

      • Переменные предпочтений: В переменных предпочтений хранятся пользовательские настройки для
        PowerShell. Эти переменные создаются PowerShell и заполняются
        значения по умолчанию. Пользователи могут изменять значения этих переменных. Например,
        переменная $MaximumHistoryCount определяет максимальное количество записей
        в истории сеансов.

        Для получения дополнительной информации, списка и описания переменных предпочтений см.
        см. about_Preference_Variables.

      Работа с переменными

      Чтобы создать новую переменную, используйте оператор присваивания, чтобы присвоить значение переменной
      переменная. Вам не нужно объявлять переменную перед ее использованием. По умолчанию
      значение всех переменных $null .

      Чтобы получить список всех переменных в сеансе PowerShell, введите
      Получение переменной . Имена переменных отображаются без предшествующего доллара.
      ( $ ) знак, который используется для ссылки на переменные.

      Например:

       $MyVariable = 1, 2, 3
      $Путь = "C:\Windows\System32"
       

      Переменные полезны для хранения результатов выполнения команд.

      Например:

       $Processes = Get-Process
      $Today = (Get-Date).DateTime
       

      Чтобы отобразить значение переменной, введите имя переменной перед
      знак доллара ( $).

      Например:

       $MyVariable
       
       1
      2
      3
       
       $Сегодня
       
       3 сентября 2019 г., 09:46:46
       

      Чтобы изменить значение переменной, присвойте ей новое значение.

      В следующих примерах показано значение переменной $MyVariable , изменения
      значение переменной, а затем отображает новое значение.

       $MyVariable = 1, 2, 3
      $моя переменная
       
       1
      2
      3
       
       $MyVariable = "Зеленый кот."
      $моя переменная
       
       Зеленый кот.
       

      Чтобы удалить значение переменной, используйте командлет Clear-Variable или измените
      значение $null .

       Clear-Variable -Name MyVariable
       
       $MyVariable = $null
       

      Чтобы удалить переменную, используйте Remove-Variable
      или Удалить-Элемент.

       Remove-Variable -Name MyVariable
       
       Remove-Item - переменная пути:\MyVariable
       

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

       $a = $b = $c = 0
       

      В следующем примере несколько значений присваиваются нескольким переменным.

       $i,$j,$k = 10, "red", $true # $i равно 10, $j равно "красному", $k равно True
      $i,$j = 10, "красный", $true # $i равно 10, $j равно [объекту[]], длина 2
       

      Для получения более подробной информации см. раздел Назначение нескольких переменных
      about_Assignment_Operators.

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

      В переменной можно хранить объекты любого типа, включая целые числа, строки,
      массивы и хеш-таблицы. И объекты, представляющие процессы, услуги, события
      журналы и компьютеры.

      Переменные PowerShell имеют свободный тип, что означает, что они не ограничены
      определенный тип объекта. Одна переменная может даже содержать коллекцию,
      или массив из разных типов объектов одновременно.

      Тип данных переменной определяется типами .NET значений
      переменная. Чтобы просмотреть тип объекта переменной, используйте
      Получить член.

      Например:

       $a = 12 # System.Int32
      $a = "Слово" # System.String
      $a = 12, "Word" # массив System.Int32, System.String
      $a = Get-ChildItem C:\Windows # Типы FileInfo и DirectoryInfo
       

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

      Чтобы использовать нотацию приведения, введите имя типа, заключенное в скобки, перед
      имя переменной (в левой части оператора присваивания). Следующее
      пример создает переменную $number , которая может содержать только целые числа, $words
      переменная, которая может содержать только строки, и переменная $dates , которая может
      содержат только объект DateTime .

       [целое]$число = 8
      $number = "12345" # Строка преобразуется в целое число.
      $номер = "Привет"
       
       Невозможно преобразовать значение "Hello" в тип "System.Int32". Ошибка: «Введенная строка была
       не в правильном формате».
      В строке:1 символ:1
      + $номер = "Привет"
      + ~~~~~~~~~~~~~~~~~
      + Информация о категории: MetadataError: (:) [],
          ArgumentTransformationMetadataException
      + FullyQualifiedErrorId : RuntimeException
       
       [строка]$words = "Привет"
      $words = 2 # Целое число преобразуется в строку.
      $words += 10 # Знак плюс (+) объединяет строки.
      $слова
       
       210
       
       [datetime] $dates = "12.09.91" # Строка преобразуется в объект DateTime.
      $ даты
       
       Четверг, 12 сентября 1991 г., 00:00:00
       
       $dates = 10 # Целое число преобразуется в объект DateTime.
      $ даты
       
       Понедельник, 1 января 0001, 00:00:00
       

      Использование переменных в командах и выражениях

      Чтобы использовать переменную в команде или выражении, введите имя переменной перед
      знаком доллара ( $ ).

      Если имя переменной и знак доллара не заключены в кавычки или если
      они заключены в двойные кавычки ( " ) знаков, значение переменной равно
      используется в команде или выражении.

      Если имя переменной и знак доллара заключены в одинарные кавычки ( ' )
      метки, в выражении используется имя переменной.

      Дополнительные сведения об использовании кавычек в PowerShell см.
      about_Quoting_Rules.

      Этот пример получает значение переменной $PROFILE , которая представляет собой путь к
      файл профиля пользователя PowerShell в консоли PowerShell.

       $ПРОФИЛЬ
       
       C:\Users\User01\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
       

      В этом примере показаны две команды, которые могут открыть профиль PowerShell в
      блокнот.exe . В примере с двойными кавычками ( " ) используются переменные
      ценить.

       блокнот $ПРОФИЛЬ
      блокнот "$ПРОФИЛЬ"
       

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

       '$ ПРОФИЛЬ'
       
       $ПРОФИЛЬ
       
       'Используйте переменную $PROFILE.'
       
       Используйте переменную $PROFILE.
       

      Имена переменных, содержащие специальные символы

      Имена переменных начинаются со знака доллара ( $ ) и могут включать буквенно-цифровые символы.
      символов и специальных символов. Длина имени переменной ограничена только
      доступная память.

      Наилучшей практикой является использование в именах переменных только буквенно-цифровых символов.
      и символ подчеркивания ( _ ). Имена переменных, содержащие пробелы и
      другие специальные символы сложны в использовании, и их следует избегать.

      Буквенно-цифровые имена переменных могут содержать следующие символы:

      • Символы Unicode из следующих категорий: Lu , Ll , Lt , Lm ,
        Lo или Nd .
      • Символ подчеркивания ( _ ).
      • Символ вопроса ( ? ).

      Следующий список содержит описания категорий Unicode. Для большего
      информацию см. в разделе UnicodeCategory.

      • Lu — Прописная буква
      • Ll — Строчная буква
      • Lt — TitlecaseLetter
      • Lm — Буква-модификатор
      • Ло — ДругоеПисьмо
      • Nd — DecimalDigitNumber

      Чтобы создать или отобразить имя переменной, содержащее пробелы или специальные
      символов, заключите имя переменной в фигурные скобки ( {} ).
      Фигурные скобки указывают PowerShell интерпретировать символы имени переменной.
      как литералы. 9 и $_ , что
      содержать буквенно-цифровые и специальные символы. Для получения дополнительной информации см.
      about_Automatic_Variables.

      Например, следующая команда создает переменную с именем save-items .
      фигурные скобки ( {} ) необходимы, поскольку имя переменной содержит дефис ( - )
      особый персонаж.

       ${сохранить-элементы} = "а", "б", "в"
      ${сохранить-элементы}
       
       а
      б
      с
       

      Следующая команда получает дочерние элементы в каталоге, который представлен
      к ProgramFiles(x86) переменная среды.

       Get-ChildItem ${env:ProgramFiles(x86)}
       

      Чтобы сослаться на имя переменной, содержащее фигурные скобки, заключите имя переменной в
      фигурные скобки и используйте символ обратной галочки, чтобы избежать фигурных скобок. Например, чтобы
      создайте переменную с именем this{value}is type:

       ${this`{value`}is} = "Имя этой переменной использует фигурные скобки и обратные кавычки."
      ${это`{значение`} равно}
       
       В имени этой переменной используются фигурные скобки и обратные кавычки.
       

      Переменные и область действия

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

      Например, переменная, которую вы создаете в функции, доступна только в
      функция. Переменная, которую вы создаете в скрипте, доступна только в
      сценарий. Если вы используете точечный источник сценария, переменная добавляется к текущему
      объем. Дополнительные сведения см. в разделе about_Scopes.

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

       $Global:Computers = "Server01"
       

      Для любого скрипта или команды, которая выполняется вне сеанса, вам потребуется Использование
      модификатор области для встраивания значений переменных из области вызывающего сеанса, чтобы
      код вне сеанса может получить к ним доступ.

      Дополнительные сведения см. в разделе about_Remote_Variables.

      Сохранение переменных

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

      Чтобы создать переменную в каждом запускаемом сеансе PowerShell, добавьте
      в свой профиль PowerShell.

      Например, чтобы изменить значение переменной $VerbosePreference в каждом
      PowerShell, добавьте следующую команду в свой профиль PowerShell.

       $VerbosePreference = "Продолжить"
       

      Вы можете добавить эту команду в свой профиль PowerShell, открыв $PROFILE
      файл в текстовом редакторе, например notepad.exe . Для получения дополнительной информации о
      Профили PowerShell, см. about_Profiles.

      Переменная: диск

      Поставщик переменных PowerShell создает диск Variable: , который выглядит и
      действует как диск файловой системы, но содержит переменные в вашем сеансе
      и их значения.

      Чтобы перейти к переменной Variable: , используйте следующую команду:

       Set-Location Variable:
       

      Чтобы вывести список элементов и переменных в диске Variable: , используйте кнопку 9. 0021 Получить-Элемент или
      Командлет Get-ChildItem .

       Переменная Get-ChildItem:
       

      Чтобы получить значение определенной переменной, используйте нотацию файловой системы, чтобы указать
      имя диска и имя переменной. Например, чтобы получить
      Автоматическая переменная $PSCulture , используйте следующую команду.

       Переменная Get-Item:\PSCulture
       
       Имя Значение
      ---- -----
      PSCulture en-US
       

      Чтобы отобразить дополнительную информацию о переменной : диск и PowerShell
      Поставщик переменных, тип:

       Get-Help Variable
       

      Переменный синтаксис с путями провайдера

      Вы можете добавить к пути провайдера префикс доллара ( $ ) и получить доступ к
      контент любого провайдера, реализующего
      IContentCmdletProvider
      интерфейс.

      Следующие встроенные поставщики PowerShell поддерживают это обозначение:

      • about_Environment_Provider
      • about_Variable_Provider
      • about_Function_Provider
      • about_Alias_Provider

      Командлеты переменных

      PowerShell включает набор командлетов, предназначенных для управления переменными.

      Чтобы получить список командлетов, введите:

       Get-Command -Noun Variable
       

      Чтобы получить справку по определенному командлету, введите:

       Get-Help <имя-командлета>
       
      Имя командлета Описание
      Clear-Variable Удаляет значение переменной.
      Получение переменной Получает переменные в текущей консоли.
      Новая переменная Создает новую переменную.
      Удалить переменную Удаляет переменную и ее значение.
      Набор переменных Изменяет значение переменной.

      См. также

      • about_Automatic_Variables
      • about_Environment_Variables
      • about_Preference_Variables
      • about_Profiles
      • about_Quoting_Rules
      • about_Remote_Variables
      • about_Scopes

      Типы данных Powershell — PowerShell

      Типы данных Powershell — PowerShell — SS64. com

      • SS64
      • PowerShell
      • Практическое руководство

      Ниже перечислены наиболее распространенные типы данных (ускорители типов), используемые в PowerShell.

       [строка] Строка символов Юникода фиксированной длины.
       [char] 16-битный символ Unicode.
       [байт] 8-битный беззнаковый символ
      
       [int] 32-битное целое число со знаком
       [long] 64-битное целое число со знаком
       [bool] Логическое значение True/False
      
       [decimal] 128-битное десятичное значение.
       [single] 32-битное число одинарной точности с плавающей запятой
       [double] 64-битное число двойной точности с плавающей запятой
       [DateTime] Дата и время
      
       [xml] XML-объект
       [массив] Массив значений
       [хэш-таблица] Объект хэш-таблицы 

      PowerShell имеет две встроенные переменные $true и $false для отображения логических значений true и false.
      Приведение выражения к [void] фактически отбрасывает его (например, out-null или перенаправление на $null)

      Шестнадцатеричные литералы имеют префикс 0x, чтобы отличить их от десятичных чисел.
      Двоичные литералы имеют префикс 0b, чтобы отличить их от десятичных чисел.

      Суффикс множителя

      Можно использовать для действительных и целых чисел:

      кибибайт

      Суффикс Значение
      д десятичный тип данных
      кб множитель
      мб мебибайт множитель
      ГБ множитель гибибайт
      тб тебибайт множитель
      пб пебибайт множитель

      Таким образом, 10 МБ будет оцениваться как 10485760, а 1,2 КБ будет оцениваться как 1228,8
      .
      Суффиксы, используемые PowerShell, должны быть числами в степени 10 в соответствии с IEC 60027-2, но на самом деле они оцениваются как в степени 2 .

      PowerShell 6.2 также добавляет несколько суффиксов типов для знаковых/беззнаковых байтов/коротких/больших целых значений.

      Юникод

      Чтобы закодировать символ Unicode в строке PowerShell, добавьте к шестнадцатеричному значению Unicode префикс 0x, а затем приведите его к System.Char:

      .

      PS> [символ] 0x263a

      Литье

      Чтобы принудительно преобразовать в определенный тип данных, добавьте префикс значения или переменной к типу в квадратных скобках, это известно как Cast Operator и принудительно выбирает выбранный тип данных:

      PS C:\> [целое число]»0064″
      64

      PS C:\> [число]$false
      0

      Обратите внимание, что при этом не выполняется проверка типов, поэтому вы можете:

      PS C:\> [строка]$num = 7
      PS C:\> $num + 2
      72

      Преобразование особенно важно при чтении данных, предоставленных пользователем (с read-host). Приведение к [string] возвращает строку, даже если пользователь вводит 123

      PS C:\> [datetime]$appointment = ‘2022-июль-02’
      PS C:\> $назначение
      02 июля 2022 г.

      ::ParseExact также можно использовать для обеспечения анализа дат в известном формате, в этом примере $dateAsString должен соответствовать формату даты второго параметра:

      PS C:\> $dateAsString = ‘2022-07-02T14:27’
      PS C:\> $appointment = [datetime]::parsexact($dateAsString, ‘yyyy-MM-ddTHH:mm’, $null)
      PS C:\> $appointment
      02 июля 2022 14:27:00

      При присвоении значения переменной можно привести любую часть выражения:

      $v1 = [число] 0123
      [целое]$v1 = 0123
      [целое]$v1 = [целое]0123

      Некоторые выражения будут неявно преобразованы еще до того, как вы их приведете:

      PS C:\> [строка]$var = [строка]0123
      PS C:\> $var
      123

      PS C:\> [строка]$var = [строка]»0123″
      PS C:\> $var
      0123

      Шестнадцатеричные числа

      Префикс «0x» к строковому значению указывает на шестнадцатеричное число.
      Вы можете вызвать преобразование в [int] или [byte], приведя его:

      PS C:\> [байт](‘0x’ + ‘FF’)
      255

      PS C:\> $hexnum = ‘fa00’
      PS C:\> [int]»0x$hexnum»
      64000

      Массивы

      Приведение переменной массива:

      [ int32 [] ] $ строго типизированный массив = @ ()

      [ int32[][] ]$multiDimensionalArray = @()

      Когда значение приводится к определенному типу данных, это одноразовая вещь.
      Когда переменная приводится к определенному типу данных, она привязывает точно так же, как DIM Variable As DataType на других языках.
      Тип данных переменной не изменится снова, если вы явно не преобразуете переменную в другой тип данных или полностью не удалите переменную (с помощью команды Remove-Variable) и не создадите ее заново.
      Get-Member и GetType() отобразят текущий тип данных , но не указывает, является ли он статическим или вариантным.

      [число] $ тест = 0123
      $тест = [строка]»00456″
      # на данный момент, какой тип данных мы получим?
      $test.GetType().Полное имя

      Если вы преобразуете дробное значение в целое, PowerShell выполнит Round() результат, чтобы удалить все десятичные знаки после запятой, используйте Truncate() из математической библиотеки .NET.

      При преобразовании строки в [DateTime] по умолчанию принимаются даты в формате США ММ/ДД/ГГГГ или ISO 8601 ГГГГ-ММ-ДД. Вы можете переопределить это, используя ::ParseExact, чтобы указать точный формат строки даты, которую вы предоставляете.

      Например, чтобы преобразовать строку даты «08-12-2012» в британском формате:

       PS C:\> [DateTime]::ParseExact("12.08.2012","дд-мм-гггг",[System.Globalization.CultureInfo]::InvariantCulture)
      Суббота, 08 декабря 2012 г. 00:00:00 

      Приведите строку даты «09-Jun-2012» в формате Великобритании, а затем отобразите ее как «гггг-ММ-дд»

       PS C:\> [DateTime]::ParseExact("09-Jun-2012","dd-MMM-yyyy",[System.Globalization.CultureInfo]::InvariantCulture).ToString("yyyy-MM-dd" )
      2012-06-09

      Тестирование типов данных

      Чтобы проверить тип данных значения, используйте оператор сравнения:

      PS C:\> 32 -is [int] 
      Истина PS C:\> $true -is [bool]
      Истина

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