Работа с массивом в powershell и листами с примерами

Вещественные литералы

Реальные литералы могут быть записаны только в десятичной нотации. Эта нотация может включать дробные значения после десятичной запятой и научные нотации с экспоненциальной частью.

Экспоненциальная часть содержит символ «e», за которым следует необязательный знак (+/-) и число, представляющее экспоненту. Например, литеральное значение равно числовом значению 100.

Реальные литералы могут иметь суффикс типа и суффикс множителя.

Суффикс Значение
тип данных decimal
множитель килобайтов
множитель мегабайтов
гигабайтный множитель
Множитель терабайтов
мультипликатор петабайтов

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

Если значение цифр экспонентной части в реальном литерале меньше минимального поддерживаемого значения, то значение этого реального литерала равно 0. Если значение цифр экспонентной части в реальном литерале меньше поддерживаемого минимума, то этот литерал имеет неправильный формат. Если значение цифр экспонентной части в литерале или реальном литерале превышает максимальное поддерживаемое значение, то этот литерал имеет неправильный формат.

Примечание

Синтаксис позволяет двойному реальному литералу иметь суффикс длинного типа.
PowerShell рассматривает этот случай как целочисленный литерал, значение которого представлено типом . Эта функция была сохранена для обеспечения обратной совместимости с более ранними версиями PowerShell. Однако программистам не рекомендуется использовать целочисленные литералы в этой форме, так как они могут легко скрывать фактическое значение литерала. Например, имеет значение 1, имеет значение 12 и имеет значение 0, ни одно из которых не является очевидным.

Как написать скрипт

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

Чтобы написать скрипт, откройте новый файл в текстовом редакторе, введите команды и сохраните их в файле с допустимым именем файла с расширением файла.

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

Чтобы создать этот скрипт, откройте текстовый редактор или редактор скриптов, введите эти команды и сохраните их в файле с именем .

Параметры в скриптах

Чтобы определить параметры в скрипте, используйте инструкцию Param. Оператор должен быть первым оператором в скрипте, за исключением комментариев и любых операторов.

Параметры скрипта работают как параметры функции. Значения параметров доступны для всех команд в скрипте. Все функции параметров функции, включая атрибут Parameter и его именованные аргументы, также допустимы в скриптах.

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

В следующем примере показан сценарий с параметром ComputerName . Обе функции скрипта могут получить доступ к значению параметра ComputerName .

Чтобы запустить этот скрипт, введите имя параметра после имени скрипта. Пример:

Дополнительные сведения об операторе Param и параметрах функции см. в about_Functions и about_Functions_Advanced_Parameters.

Написание справки по скриптам

Раздел справки для сценария можно написать с помощью одного из двух следующих методов:

  • Comment-Based справку по скриптам

  • XML-Based справку по скриптам

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

Чтобы связать скрипт с разделом справки на основе XML, используйте .. Ключевое слово comment externalHelp Help. Дополнительные сведения о ключевом слове ExternalHelp см. в about_Comment_Based_Help. Дополнительные сведения о справке на основе XML см. в статье «Написание справки по командлетам».

Возвращение значения выхода

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

В Windows любое число между и разрешено.

В Unix разрешены только положительные числа от (0) до (255). Отрицательное число в диапазоне отсчета автоматически преобразуется в положительное число путем добавления 256. Например, преобразуется в .

В PowerShell инструкция задает значение переменной . В командной оболочке Windows (cmd.exe) инструкция exit задает значение переменной среды.

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

6.3 Преобразование в тип char

При преобразовании любого значения в тип char применяются следующие правила.

  • Преобразование значения типа bool, decimal, float или double приводит к ошибке.
  • Значение типа NULL преобразуется в символ null (U+0000).
  • Значение типа integer, которое можно представить в виде значения типа char, преобразуется в это значение; в противном случае преобразование приводит к ошибке.
  • Преобразование значения типа string, имеющего длину, отличную от 1, приводит к ошибке.
  • Значение типа string, имеющее длину 1, преобразуется в значение типа char, имеющее один символ.
  • Значение типа numeric, которое после округления дробной части может быть представлено в виде значения целевого типа, преобразуется в это округленное значение; в противном случае преобразование приводит к ошибке.
  • Что касается других значений ссылочного типа, если ссылочный тип поддерживает такое преобразование, оно выполняется; в противном случае преобразование приводит к ошибке.

Работа с элементами

В Windows PowerShell есть командлеты, которые умеют работать с элементами, под элементами здесь можно понимать: файлы, папки, ключи реестра и так далее.

  • Clear-Item — очищает содержимое элемента, но не удаляет сам элемент;
  • Copy-Item – копирует элемент;
  • Get-Item — получает элемент в указанном месте;
  • Invoke-Item — выполняет действие по умолчанию над указанным элементом;
  • Move-Item – перемещает элемент;
  • New-Item – создает новый элемент;
  • Remove-Item – удаляет указанные элементы;
  • Rename-Item — переименовывает элемент в пространстве имен поставщика Windows PowerShell;
  • Set-Item — изменяет элемент;
  • Get-ChildItem — возвращает элементы и дочерние элементы в одном или нескольких определенных местах;
  • Get-Location – выводит информацию о текущем местонахождении.

6.8 Преобразование в тип string

При преобразовании любого значения в тип string применяются следующие правила.

  • Логическое значение преобразуется в False; логическое значение преобразуется в True.
  • Значение типа char преобразуется в односимвольную строку, содержащую этот символ.
  • Значение типа numeric преобразуется в строку, имеющую форму соответствующего числового литерала.
    Однако в результате нет начальных или конечных пробелов, начального знака ”плюс”, целые числа имеют основание 10 и отсутствует суффикс типа. Для десятичного преобразования масштаб сохраняется. Значения -∞, +∞ и NaN преобразуются в значения «-Infinity», «Infinity» и «NaN» соответственно.
  • Значение типа NULL преобразуется в пустую строку.
  • Для одномерного массива результатом является строка, содержащая значения каждого элемента в этом массиве от начала до конца, преобразованные в строку, в которой элементы разделяются текущим разделителем поля вывода (). Для массива с элементами, которые сами являются массивами, преобразуются только элементы верхнего уровня. Строка, используемая для представления значения элемента, который является массивом, определяется реализацией. Многомерный массив сначала преобразуется в плоскую структуру (), а затем обрабатывается как одномерный массив.
  • Значение типа NULL преобразуется в пустую строку.
  • Значение типа scriptblock преобразуется в строку, содержащую текст этого блока без символов-разделителей { и }.
  • Значение типа enumeration преобразуется в строку, содержащую имена всех констант перечисления, закодированных в этом значении, разделенных запятыми.
  • Что касается других значений ссылочного типа, если ссылочный тип поддерживает такое преобразование, оно выполняется; в противном случае преобразование приводит к ошибке.

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

Запуск скрипта

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

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

Политика выполнения сохраняется в реестре, поэтому ее необходимо изменить только один раз на каждом компьютере.

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

В командной строке введите:

или

Это изменение действует немедленно.

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

Например, чтобы запустить скрипт Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:

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

Например, чтобы запустить скрипт ServicesLog.ps1 в локальном каталоге, введите:

Если скрипт имеет параметры, введите параметры и значения параметров после имени файла скрипта.

Например, следующая команда использует параметр ServiceName скрипта Get-ServiceLog для запроса журнала действий службы WinRM.

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

Запуск с помощью PowerShell

Начиная с PowerShell 3.0, можно запускать скрипты из проводник.

Чтобы использовать функцию «Запуск с помощью PowerShell», выполните следующие действия.

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду «Выполнить с помощью PowerShell».

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

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

Выполнение скриптов на других компьютерах

Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета .

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

Следующая команда запускает скрипт на удаленных компьютерах с именами Server01 и Server02.

Работа с файловой системой

Одна из задач, с которой часто сталкиваются многие ИT-специалисты, связана с манипуляциями с файлами, такими как копирование, перемещение, переименование, удаление файлов и каталогов. На рис. 13 показаны основные команды Windows PowerShell, применяемые для манипуляций с файловой системой: new-item
, copy-item
, move-item
, rename-item
и remove-item
.

В отличие от других оболочек, в которых существует и набор команд для файлов (например, delete или rename), и набор для каталогов (например, rd или md), в Windows PowerShell единый набор команд используется для манипуляций как с файлами, так и с каталогами.

Первая команда в нашем примере — new-item TextFiles –itemtype directory
— применяется для создания нового подкаталога TextFiles в текущем каталоге. Если опустить параметр –itemtype
, то Windows PowerShell спросит, что мы создаем — файл (file) или каталог (directory). Отметим, что у команды new-item
есть алиас — ni. В сокращенном виде наша первая команда будет выглядеть так:

PS C:> ni TextFiles –itemtype directory

Затем мы используем команду copy-item
(алиасы — cpi, cp, copy
) для копирования всех файлов с расширением *.txt в подкаталог TextFiles. Если применять данную команду в пакетном файле, имеет смысл сделать ее более понятной, указав параметры –path
(источник) и –destination
(приемник):

PS C:>copy-item –path ‘.\*.txt’ –destination ‘.\TextFiles’

После выполнения команды копирования мы используем команду set-location
для перехода в подкаталог TextFiles. С помощью команды rename-item
переименовываем файл psdemo.txt в psdemo.bak. При необходимости можно применять опции –path
и –newName
. После того как файл переименован, переносим его на один уровень вверх, используя команду move-item
. Затем применяем команду set-location
, а точнее — ее алиас sl
для перехода в другой каталог. Манипуляции с файловой системой мы завершаем удалением всего каталога TextFiles, используя команду remove-item
. Поскольку в каталоге TextFiles содержатся файлы, применяется опция –recurse
. Если эта опция не указана, Windows PowerShell запросит подтверждение перед выполнением команды remove-item
.

6.5 Преобразование в типы float и double

При преобразовании любого значения в тип float или double применяются следующие правила.

  • Логическое значение False преобразуется в нуль; логическое значение True преобразуется в 1.
  • Значение типа char представляется точно так.
  • Значение типа numeric представляется точно так, если это возможно; однако при преобразовании типов int, long и decimal в тип float или типов long и decimal в тип double, некоторые из младших значащих битов целочисленного значения могут быть потеряны.
  • Значение типа NULL преобразуется в нуль.
  • Строка, представляющая число, преобразуется, как описано в разделе ; в противном случае преобразование приводит к ошибке.
  • Что касается других значений ссылочного типа, если ссылочный тип поддерживает такое преобразование, оно выполняется; в противном случае преобразование приводит к ошибке.

Полезные мелочи

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

Например, вместо «Get-Process» можно ввести просто «gps». Задать свой алиас
очень просто:

Теперь чтобы вывести дату, достаточно набрать «d». Если в скриптах некоторый
код повторяется несколько раз, имеет смысл использовать функции:

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

Командная строка (хост) PowerShell.exe имеет простой интерфейс, и несколько
неудобна при повседневном использовании и тестировании скриптов. При постоянной
работе лучше подыскать альтернативные решения, благо их сегодня предостаточно.
Например, бесплатный для некоммерческого использованияPowerShell
Plus или PowerShell
Analyzer. Хост
PoshConsole, основанный на графической подсистеме WPF (Windows Presentation
Foundation), обладает интересным режимом QuakeMode (Get-QuakeMode), эмулирующим
вид консоли популярной игры. Очень удобен редакторPowerGUI, созданный нашими
соотечественниками, с автоматическим дополнением команд, хорошим отладчиком,
возможностью поиска командлетов в репозитарии PoshCode Cmdlets и многими другими
функциями. Поклонники FAR наверняка оценят наличие плагина для этого файлового
менеджера — FarNet.

Для чего предназначена оболочка PowerShell?

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

  • Управление облаком. PowerShell можно использовать для управления облачными ресурсами. Например, можно получать сведения об облачных ресурсах, а также обновлять ресурсы или развертывать новые.
  • CI/CD. PowerShell можно также использовать в рамках конвейера непрерывной интеграции и непрерывного развертывания.
  • Автоматизация задач для Active Directory и Exchange. PowerShell можно использовать для автоматизации практически любой задачи в Windows, например создание пользователей в Active Directory и почтовых ящиков в Exchange.

Существует гораздо больше областей использования, но предыдущий список дает понять, что PowerShell удалось добиться значительного прогресса.

Массивы объектов

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

Многие командлеты возвращают коллекции объектов в виде массивов, когда они назначаются переменной.

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

Доступ к свойствам

Можно использовать индекс для доступа к отдельному элементу в коллекции, как и в случае с типами значений.

Мы можем напрямую получать доступ к свойствам и обновлять их.

Свойства массива

Обычно для доступа ко всем свойствам необходимо перечислить весь список следующим образом:

Кроме того, можно использовать командлет .

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

Перечисление выполняется в обычном порядке, но мы избавлены от всех связанных с этим сложностей.

Фильтрация Where-Object

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

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

Where()

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

Эта функция добавлена в PowerShell 4.0.

Обновление объектов в циклах

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

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

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

Новое в PowerShell 2.0

PowerShell v2 используется по умолчанию в Win2k8R2 и Win7. По сравнению с
версией 1.0, оболочка получила 24 новых командлета и имеет ряд
усовершенствований, о которых хотелось бы сказать отдельно (все они доступны в
CTP3):

  • Удаленное выполнение команд (PowerShell Remoting) — используя технологию
    WinRM, PowerShell может выполнять команды сразу на нескольких системах и
    отслеживать результат (Get-Help About_Remoting);
  • Выполнение в фоне (Background Jobs) – возможность выполнять команды и
    скрипты в фоне (Get-Help About_PSJob);
  • Новый API, который позволяет встраивать PowerShell в другие продукты;
  • Новые переменные — пополнился набор переменных. Например,
    $commandLineParameters позволит получить аргументы командной строки;
  • Отладчик в консоли – теперь в скриптах, кроме Set-PSDebug, можно
    использовать еще ряд командлетов, устанавливать точки останова и продолжать
    отладку в пошаговом режиме (Get-Help about_debugger);
  • Многочисленные улучшения в работе с WMI;
  • Script Internationalization — новая функция, позволяющая создать скрипт,
    который затем можно легко перевести на другой язык (Get-Help
    about_Script_Internationalization);
  • Новые операторы (@), -Join, -Split, упрощающие работы с текстовыми
    строками;
  • ScriptCmdlets – возможность создания командлетов только с использованием
    кода PowerShell, без применения C# или Visual Basic .Net;
  • Командлет Out-GridView позволяет выводить данные в виде таблицы (Get-Help
    Out-GridView);
  • PowerShell Integrated Scripting Environment – графическая оболочка.

Простые функции

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

Например, следующая функция запускает PowerShell с параметром «Запуск от имени администратора «.

Чтобы использовать функцию, введите:

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

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

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

Использование XML-файлов

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

Для примера возьмем конфигурационный файл Windows Calendar, который выглядит так (рис. 18):

и выполним над ним манипуляции, представленные на рис. 19.

В первой строке мы загружаем содержимое всего XML-файла в переменную, используя команду get-content
:

PS C:\> $doc = get-content ‘.\settings.xml’

Обратим внимание на применение типа данных : если не указать использование данных этого типа, в переменную будет загружен просто текст. Во второй строке мы выбираем определенную ветвь XML-файла — для этого применяется метод selectnodes
объекта, хранящего XML-данные и XPath-описание адреса ветви:

Во второй строке мы выбираем определенную ветвь XML-файла — для этого применяется метод selectnodes
объекта, хранящего XML-данные и XPath-описание адреса ветви:

PS C:\> $settings = $doc.selectnode(‘CalendarSettings/X-Root/VCalendar’)

После этого мы используем команду foreach-object
для получения значения свойства Name
для всех элементов в данной ветви.

Значения свойств

Несмотря на то, что все объекты определенного типа имеют одинаковые свойства, значения этих свойств описывают конкретный объект. Например, каждый объект FileInfo имеет свойство CreationTime , но значение этого свойства отличается для каждого файла.

Наиболее распространенным способом получения значений свойств объекта является использование оператора доступа к членам (). Введите ссылку на объект, например переменную, содержащую этот объект, либо команду, которая его возвращает. Затем введите оператор (), за которым следует имя свойства.

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

Можно также сохранить объект в переменной, а затем получить его свойства с помощью метода доступа к членам (), как показано в следующем примере:

Для отображения значений свойств объекта можно также использовать командлеты и командлеты. и каждый из них имеет параметр Property . Параметр Property можно использовать для указания одного или нескольких свойств и их значений. Или можно использовать подстановочный знак () для представления всех свойств.

Например, следующая команда отображает значения всех свойств файла pwsh.exe.

Статические свойства

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

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

Чтобы получить значение статического свойства, используйте следующий синтаксис.

Например, следующая команда получает значение статического свойства UtcNow класса.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: