0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Переменные в Windows PowerShell 2.0

Содержание

Что такое Windows PowerShell и с чем его едят? Часть 2: введение в язык программирования

Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.

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

Оглавление:

Комментарии
Переменные и их типы
Системные переменные
Области видимости
Переменные окружения (среды)
Арифметические операторы и операторы сравнения
Операторы присваивания
Логические операторы
Условный переход
Циклы
Массивы
Хэш-таблицы
Функции
Обработка ошибок

Писать код можно в любом текстовом редакторе или с использованием интегрированной среды разработки — проще всего взять Windows PowerShell ISE из комплекта поставки серверных операционных систем Microsoft. Нужно это только для достаточно сложных скриптов: короткие наборы команд проще выполнять в интерактивном режиме.

Комментарии

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

Переменные и их типы

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

Для инициализации переменной (присвоения ей значения) применяется оператор присваивания (символ =):

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

Важно понимать, что переменные в PowerShell — это полноценные объекты (классы) со свойствами и методами, типы которых основаны на имеющихся в .NET Core. Перечислим основные:

PowerShell поддерживает неявное преобразование типов, кроме того тип переменной может меняться на ходу (например, при помощи оператора присваивания), если он не указан принудительно — в этом случае интерпретатор выдаст ошибку. Определить тип переменной из предыдущего примера можно при помощи вызова метода GetType():

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

Для просмотра объявленных переменных и их значений можно использовать специальный командлет:

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

Системные переменные

Помимо объявленных пользователем существуют встроенные (системные) переменные, которые не удаляются после завершения текущего сеанса. Делятся они на два типа, при этом данные о состоянии PowerShell хранятся в автоматических переменных, которым нельзя самостоятельно присвоить произвольные значения. К их числу относится, например, $PWD:

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

Вдобавок к операторам и командлетам для обращения к объявленным переменным существует псевдонакопитель Variable:. Работать с ним можно по аналогии с другими накопителями, а переменные в этом случае напоминают объекты файловой системы:

Области видимости

Для переменных в PowerShell существует понятие области видимости (Scope). Действие глобальной области (Global) распространяется на весь текущий сеанс — в нее входят, например, системные переменные. Локальные (Local) переменные доступны только в области, где они были определены: скажем внутри функции. Есть еще понятие области действия сценария (Script), но для команд скрипта она по сути является локальной. По умолчанию при объявлении переменных им задается локальная область действия, а чтобы это изменить, нужна специальная конструкция вида: $Global: переменная = значение.

Переменные окружения (среды)

Из PowerShell доступен еще один псевдонакопитель Env:, с помощью которого можно обратиться к переменным среды. При запуске оболочки они копируются из родительского процесса (т.е. из инициировавшей текущий сеанс программы) и обычно их первоначальные значения совпадают со значениями в панели управления. Для просмотра переменных окружения используется командлет Get-ChildItem или его псевдонимы (алиасы): ls и dir.

Эти переменные представляют собой последовательности байтов (или символов, если угодно), интерпретация которых зависит только от использующей их программы. Командлеты *-Variable с переменными среды не работают. Чтобы обратиться к ним, придется использовать префикс диска:

Арифметические операторы и операторы сравнения

Less than / Меньше (аналог и = для сравнения не используются, поскольку задействованы для других целей.

Операторы присваивания

Помимо самого распространенного оператора = существуют и другие операторы присваивания: +=, -=, *=, /= и %=. Они изменяют значение перед присвоением. Аналогично ведут себя унарные операторы ++ и —, которые увеличивают или уменьшают значение переменной — они тоже относятся к операторам присваивания.

Логические операторы

Для описания сложных условий одного только сравнения недостаточно. Записать любые логические выражения можно с помощью операторов: -and, -or, -xor, -not и. Работают они как и в других языках программирования, при этом можно использовать круглые скобки, чтобы задать порядок вычисления:

Условный переход

Операторы ветвления в PowerShell стандартные: IF(IF…ELSE, IF…ELSEIF…ELSE) и SWITCH. Рассмотрим их использование на примерах:

Циклы

В языке PowerShell есть несколько разновидностей циклов: WHILE, DO WHILE, DO UNTIL, FOR и FOREACH.

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

Циклы с постусловием отработают хотя бы один раз, потому что проверка условия производится после выполнения итерации. При этом DO WHILE работает, пока условие истинно, а DO UNTIL — пока оно ложно:

Количество итераций цикла FOR известно заранее:

В цикле FOREACH осуществляет перебор элементов массива или коллекции (хэш-таблицы):

Массивы

В переменных PowerShell хранятся не только единичные объекты (число, строка и т.д.), но и множественные. Самая простая разновидность таких переменных — массивы. Массив может состоять из нескольких элементов, из одного элемента или быть пустым, т.е. не содержать элементов. Для его объявления используется оператор @(), который понадобится нам в следующей статье — он очень важен для добавления в массив других массивов (создания многомерных массивов), передачи массивов в функции в качестве аргумента и тому подобных задач:

При инициализации массива его значения перечисляются через запятую (специальный оператор ,):

В большинстве случаев оператор @() можно опустить:

В этом случае массив из одного элемента инициализируется следующим образом

Для обращения к элементам массива используется начинающийся с нуля целочисленный индекс и оператор индекса (квадратные скобки):

Читать еще:  Не удаляется программа с компьютера

Можно указать несколько индексов через запятую, в т.ч. повторяющихся:

Оператор… (две точки — оператор диапазона) возвращает массив целых чисел на определенном верхней и нижней границей отрезке. Например, выражение 1..4 выводит массив из четырех элементов @(1, 2, 3, 4), а выражение 8..5 — массив @(8, 7, 6, 5).

С помощью оператора диапазона можно инициализировать массив ($test_array = 1..4) или получить срез (slice), т.е. последовательность элементов одного массива с индексами из другого. При этом отрицательное число -1 обозначает последний элемент массива, -2 — предпоследний и т.д.

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

Если попытаться обратиться к единственному несуществующему элементу массива, возвращается значение $null.

В PowerShell массивы могут содержать элементы разных типов или быть строго типизированными:

Где свойство $test_array.count — количество элементов массива.

Пример создания строго типизированного массива:

Хэш-таблицы

Еще один базовый тип переменных в языке PowerShell — хэш-таблицы, которые также называют ассоциативными массивами. Hashtable похожи на JSON object и строятся по принципу ключ-значение. В отличие от обычных массивов, доступ к их элементам осуществляется по именованным ключам, которые являются свойствами объекта (также можно использовать оператор индекса — квадратные скобки).

Пустая хэш-таблица объявляется с помощью служебного символа @ и операторных скобок:

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

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

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

Функции

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

Функция всегда возвращает результат — это массив результатов всех ее стейтментов, если их более одного. Если стейтмент один, возвращается единственное значение соответствующего типа. Конструкция return $value добавляет элемент со значением $value к массиву результатов и прерывает выполнение statement list, а пустая функция возвращает $null.

Для примера создадим функцию возведения числа в квадрат:

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

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

При описании функции можно присвоить аргументам значения по умолчанию:

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

Обработка ошибок

В PowerShell существует механизм Try…Catch…Finally, позволяющий обрабатывать исключительные ситуации. В блок Try помещается код, в котором может возникнуть ошибка, а в блок Catch — ее обработчик. Если ошибки не было, он не выполняется. Блок Finally выполняется после блока Try вне зависимости от возникновения ошибки, а блоков Catch может быть несколько для исключений различных типов. Само исключение записывается в не требующую объявления переменную по умолчанию ($_) и может быть легко извлечено. В примере ниже мы реализуем защиту от ввода некорректного значения:

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

Программирование на языке PowerShell

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

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

Язык PowerShell – это объектно-ориентированный скриптовой язык программирования, который является частью технологии Windows PowerShell. Синтаксис всех программных конструкций языка PowerShell схож с синтаксисом СИ подобных языков.

Давайте подробней рассмотрим возможности программирования, которые есть в языке PowerShell.

Примечание! Все примеры ниже выполнялись в интегрированной среде сценариев Windows PowerShell (ISE) на операционной системе Windows Server 2016.

Программные конструкции Windows PowerShell

Переменные в Windows PowerShell

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

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

Для того чтобы создать переменную, необходимо перед ее названием указать знак доллара ($). В случае необходимости можно принудительно указать тип данных переменной в квадратных скобках перед ее названием. Например, ниже мы создаем переменную TestVar с целочисленным типом данных (int) и сразу ее инициализируем.

Так как PowerShell объектно-ориентированный язык программирования, в качестве значения переменной может выступать сложный объект со своими свойствами и методами. Например, встроенная переменная $PSVersionTable, которая содержит служебную информацию о версии PowerShell.

Типов данных переменных в Windows PowerShell очень много, так как они основаны на типах, которые есть в .NET Framework. Но, в то же время, есть и наиболее распространенные типы данных, т.е. базовые, такие как:

  • [int] — целое число, 32 бита;
  • [single] — число с плавающей запятой одинарной точности;
  • [double] — число с плавающей запятой двойной точности;
  • [string] — строка символов, т.е. текст;
  • [char] — один символ;
  • [Boolean] — значения «Истина» или «Ложь»;
  • [datetime] — дата или время.

Для работы с переменными существуют специальные командлеты PowerShell:

  • New-Variable – создание переменной;
  • Set-Variable – присваивание переменной значения;
  • Get-Variable – получение переменной;
  • Clear-Variable – очистка переменной;
  • Remove-Variable – удаление переменой.

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

Условные конструкции в PowerShell

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

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

Операторы сравнения PowerShell

  • -eq – равно (в других языках обычно знак =);
  • -ne – не равно (в других языках эквивалентно знакам <> или !=);
  • -gt – больше (в других языках обычно знак >);
  • -lt – меньше (в других языках обычно знак =);
  • -le – меньше или равно (в других языках эквивалентно знакам
Читать еще:  Как открыть текстовый файл со списком команд командной строки в среде восстановления Windows 7 или в меню выбора действия Windows 8

SWITCH

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

Циклы в PowerShell

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

В Windows PowerShell есть несколько разновидностей циклов, а именно:

Цикл WHILE

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

Цикл DO WHILE

Это цикл с постусловием, т.е. он хоть раз, но выполнится, в отличие от цикла WHILE, работа которого может и не начаться, если условие не выполняется.

Цикл DO UNTIL

Если цикл DO WHILE выполняется пока условие истина, то DO UNTIL выполняется пока условие ложно.

Цикл FOR

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

Перебор FOREACH

Это разновидность цикла, при которой происходит перебор элементов коллекции. В примере ниже мы сохраняем результат командлета Get-Service (т.е. список служб), а затем с помощь перебора FOREACH выводим название службы и ее статус.

Массивы в PowerShell

Конечно же, в PowerShell есть и массивы. Массив — это структура данных, предназначенная для хранения коллекции элементов. Элементы массива могут быть одного или разных типов, т.е. массив может быть как строго типизированный, так и нет.

Как и во многих языках программирования в PowerShell к элементу массив можно обращаться по индексу (начинающегося с нуля). При инициализации массива значения мы перечисляем через запятую.

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

Пример создания строго типизированного массива.

Пример перебора элементов массива.

Обработка ошибок в Windows PowerShell

Для отслеживания и перехвата ошибок в Windows PowerShell есть механизм Try…Catch. Он представляет собой конструкцию, при которой Вы весь код, в котором может возникнуть исключительная ситуация (ошибка), помещаете в блок Try. В блоке Catch Вы пишите код, который должен выполниться при возникновении ошибки. Если ошибок не было, то блок Catch просто не выполнятся.

В примере ниже мы хотим защитить себя от ситуаций, когда пользователь может ввести какое-нибудь непонятное число, например 0 (или вообще текст), а как Вы знаете делить на ноль нельзя. Поэтому тот код, в котором может возникнуть такая ситуация мы поместили в блок Try. В блоке catch мы выводим короткое, понятное предупреждение пользователю.

Вот мы с Вами и рассмотрели основы программирования на языке PowerShell, надеюсь, материал был Вам полезен, пока!

Особенности Windows PowerShell 2.0

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

10. Новые команды. В PowerShell 2.0 появится 24 новых команды, предназначенных для отладки, работы с Windows Management Instrumentation (WMI) и фоновыми заданиями. Мне очень нравится Out-GridView — эта команда отображает результаты других инструкций в интерактивной таблице, где можно сортировать данные и пользоваться поиском.

9. Новые операторы. В новой версии будут доступны три полезных оператора. Оператор @ передает набор параметров; оператор -split разбивает строку с разделителями в массив строк; оператор -join объединяет несколько строк, добавляя разделители.

8. Новые встроенные переменные. В PowerShell 2.0 пополнен набор системных переменных. Переменная $commandLineParameters поможет работать с аргументами командной строки. Переменная $PSVersionTable содержит текущую версию PowerShell. $Culture и $UICulture предоставляют информацию об активных региональных настройках (т. е. языковых), в том числе для пользовательского интерфейса.

7. Try-Catch-Finally. Вслед за другими языками семейства .NET PowerShell 2.0 будет поддерживать стандартную конструкцию Try-Catch-Finally для обработки исключений. Блок Try предназначен для последовательного успешного выполнения нескольких инструкций. При возникновении ошибок управление передается блоку Catch. Необязательный блок Finally содержит код, который должен быть выполнен после завершения Try-Catch (в любом случае).

6. Интерфейс API для встраивания PowerShell. Microsoft добавила поддержку сценариев PowerShell во все новейшие серверные продукты, включая Exchange Server 2007, SQL Server 2008 и Windows Server 2008 — согласно обновленным общим требованиям к разработке продуктов Common Engineering Criteria. Новые возможности интерфейса API обещают включить в сферу применения PowerShell еще более широкий круг продуктов, поскольку встраивать PowerShell в программные продукты становится проще.

5. Отладка сценариев. Усовершенствованы возможности отладки сценариев. С помощью новых команд отладчика PowerShell 2.0 вы сможете фиксировать точки останова и выполнять пошаговую отладку сценариев в консольном окне PowerShell без необходимости устанавливать и запускать графические среды разработки. Узнать подробнее об отладке сценариев в PowerShell 2.0 можно с помощью команды

4. Фоновые процессы. Невозможность выполнения фоновых процессов в PowerShell 1.0 затрудняла переход от сценариев командной оболочки Windows, в которых можно было использовать команду Start. Теперь с помощью новой команды Start-PSJob в PowerShell 2.0 можно асинхронно запускать фоновые задачи на локальных или удаленных системах. Дополнительную информацию можно получить, выполнив команду

3. ScriptCmdlets. Для создания новых команд в PowerShell 1.0 приходится программировать в среде .NET. Это требование обычно означает, что новые команды могут создавать только профессиональные разработчики. С PowerShell 2.0 такую возможность получат и системные администраторы: команды типа ScriptCmdlets можно будет создавать прямо из интерфейса PowerShell. Чтобы подробнее узнать о создании команд-сценариев, выполните:

get-help about_scriptcmdletparameters
get-help about_scriptcmdletmethods

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

1. Интегрированная среда разработки сценариев. Для меня самым приятным новшеством стала интегрированная среда разработки сценариев Integrated Scripting Environment. Графический интерфейс ISE позволяет при написании сценариев пользоваться возможностями цветового кодирования синтаксических элементов и работы со сценариями во вкладках. В нем можно работать с точками останова и пошагово отлаживать сценарии PowerShell. Если кому-то начать осваивать PowerShell было сложно, ISE гарантированно даст новый импульс успешному продвижению в деле написания сценариев PowerShell.

Майкл Оти — Редактор Windows IT Pro и президент компании TECA (Портленд, шт. Орегон), занимающейся разработкой программного обеспечения и консалтингом. mikeo@windowsitpro.com

Поделитесь материалом с коллегами и друзьями

Установка PowerShell 2.0 в Windows XP — 2008

В настоящий момент доступен релиз PowerShell 2.0, а сам PowerShell второй версии по-умолчанию входит в состав Windows 2008R2 и Windows 7. Но для Windows XPSP3, Windows 2003SP2, Windows VistaSP1, Windows 2008 и 2008SP2 все необходимое можно установить единым пакетом, который называется Windows Management Framework. В состав фрейворка входят — Windows PowerShell 2.0, WinRM 2.0 и BITS 4.0. Скачать готовый пакет можно с адреса — support.microsoft.com/kb/968929. . Для XP предлагается exe файл, для Windows 2008 — msu. Доступна и русская версия поэтому будьте внимательны. Устанавливаются оба двойным щелчком.
После распаковки пакета принимаем лицензионное соглашение.

Ждем пока распакуются и установятся обновления.

По окончании потребуется перезагрузка системы.

Поле перезагрузки ждем пока будут применены новые обновления.

После чего значок для запуска PowerShell (Windows PowerShell Modules) появится в меню Администрирование. При первом запуске скорее всего появится сообщение о том, что на даннгом компьютере выполнение PowerShell скриптов запрещено и как рекомендация набрать «get-help about_signing«. Если был установленн heccrqb вариант, то все подстказки будут полуены на русском.

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

Читать еще:  Как узнать, какого типа диски у компьютера - HDD или SSD

PS> Get-ExecutionPolicy AllSigned

Существует четыре типа политики:

  • Restricted — возможно выполнение отдельных команд, сценарии запрещены;
  • AllSigned — разрешено выполнение подписанных сценариев, перед запуском запрашивается подтверждение;
  • RemoteSigned – похож на предыдущий, не запрашивается выполнение сценариев, подписанных надежным издателем, не требуется подпись для локальных сценариев;
  • Unrestricted – можно запускать неподписанные сценарии.

Глобальные переменные в модулях

Есть модуль (самописный) который производит логирование выполнения скрипта в SQL Базу данных.

Среди прочих параметров, которые нужно записывать есть ошибки($Error) и местоположение скрипта $MyInvocation.MyCommand.Source .

Если я зашиваю эти параметры прям в тело функции

Глобальные переменные в других модулях
привет всем! если в главном модуле Mod1 объявлена переменная Dim Variable as Integer, в зоне.

Глобальные и статические глобальные переменные
Скажите, чем отличаются глобальные переменные от статических глобальных переменных?

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

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

Но не отрабатывает.

В каждом скрите есть шапка следующего вида:

и внутри модуля идет сбор информации из шапки

Так вот, ниже ошибка какую выдает модуль

Get-Content : Cannot bind argument to parameter ‘Path’ because it is an empty string.
At \ru-mscfnp02Powershell$ModulesS et-AldLogSet-AldLog.psm1:59 char:30
+ $Script_Autor =((get-content $ScriptPath | select-string -Pattern ‘@A .
+

+ CategoryInfo : InvalidData: ( [Get-Content], ParameterBindingValidationExce ption
+ FullyQualifiedErrorId : ParameterArgumentValidationErr orEmptyStringNotAllowed,Micros oft.PowerShell.Commands.GetCon tentCommand

Зашей функцию в её собственный модуль
( Ps: не вчитывался, не проверял, просто в качестве идеи )

Get-ChildItem_W : Имя «Get-ChildItem_W» не распознано как имя командлета, функции, файла сценария или выполняе
мой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повтори
те попытку.
C:MyScript.ps1:3 знак:1
+ Get-ChildItem_W
+

+ CategoryInfo : ObjectNotFound: (Get-ChildItem_W:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Что то у меня не выходит.
Ниже подробно описываю что я делаю:

Test-env.psm1 лежит в C:Program FilesWindowsPowerShellModule stest-env

ps1 лежит на рабочем столе. Запускаю его нажав правой кнопкой мыши — Run With Powershell

Результат:
Get-Content : Cannot bind argument to parameter ‘Path’ because it is an empty string.
At C:Program FilesWindowsPowerShellModule stest-envtest-env.psm1:2 char:5
+ (gc $global:MyInvocation.MyCommand .Source)[0]+»`r`n»>D:Test.txt
+

+ CategoryInfo : InvalidData: ( [Get-Content], ParameterBindingValidationExce ption
+ FullyQualifiedErrorId : ParameterArgumentValidationErr orEmptyStringNotAllowed,Micros oft.PowerShell.Commands.GetC
ontentCommand

Q231EQ : The term ‘Q231EQ’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:UsersgmirzoyanDesktopTES T-env.ps1:1 char:1
+ Q231EQ
+

+ CategoryInfo : ObjectNotFound: (Q231EQ:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Обновление версии PowerShell в Windows

В этой статье мы рассмотрим, как обновить версию Windows PowerShell до актуальной 5.1 и установить (обновить) PowerShell Core 7.0. В предыдущей статье мы рассказывали, что на данный момент есть две ветки PowerShell: старая версия Windows PowerShell (максимальная версия 5.1, которая более не развивается) и новая платформа PowerShell Core (сейчас доступна версия 7.0). Несмотря на то, что нумерация версий PowerShell продолжается с 5.1 (6.0, 6.1, 7.0 и т.д.), это две разные платформы. Соответственно мы рассмотрим отдельно как обновить Windows PowerShell и PowerShell Core.

Обновление Windows PowerShell до 5.1

Попробуем обновить версию Windows PowerShell в Windows Server 2012 R2 до версии 5.1.

По-умолчанию Windows Server 2012 R2 (Windows 8.1) устанавливается с версией 4.0.

Сначала проверим текущую версию PowerShell (на скриншоте видно, что это PowerShell 4.0):

Чтобы обновить вашу версию PowerShell до 5.1, нужно установить пакет Windows Management Framework 5.1, который в свою очередь требует наличия .NET Framework 4.5.2 (или более поздней версии). Убедитесь, что у вас установлена версий .NET 4.5.2 или выше командой:

(Get-ItemProperty ‘HKLM:SOFTWAREMicrosoftNET Framework SetupNDPv4Full’ -Name Release).Release

В моем случае код 378675 говорит о том, что установлена версия .NET 4.5.1. Поэтому мне нужно скачать и установить более новую .NET Framework 4.8 (ссылка на офлайн установщик https://go.microsoft.com/fwlink/?linkid=2088631 — ndp48-x86-x64-allos-enu.exe).

Установите .NET 4.8 (потребуется перезагрузка).

Скачайте WMF 5.1 для Windows Server 2012 R2 — Win8.1AndW2K12R2-KB3191564-x64.msu (https://go.microsoft.com/fwlink/?linkid=839516).

Установите Windows Management Framework 5.1.

После перезагрузки сервера, запустите консоль PS и убедитесь, что версия была обновлена до PowerShell 5.1.

Установка/обновление PowerShell Core 7.0

Обратите внимание, что последняя версия Windows PowerShell, устанавливаемая в Windows 10 и Windows Server 2109 — PowerShell 5.1. Вместо нее Microsoft начала разрабатывать кроссплатформенную версию PowerShell Core. На данный момент доступны версии PowerShell Core 6.0, 6.1, 6.2 и 7.0. По сути PowerShell Core это новая платформа, которая устанавливается в системе вместе с Windows PowerShell. Т.е. нельзя обновить PowerShell 5.1 до PowerShell Core 7.0. PowerShell 7 устанавливается на компьютере отдельно от Windows PowerShell 5.1.

Если у вас уже установлен PowerShell Core 6.0, вы можете обновить версию PowerShell на своем компьютере до последней версии PowerShell 7.0 Core (либо можно установиь PowerShell Core 7.0 рядом с Windows PowerShell 5.1). В этом примере мы попробуем обновить версию PowerShell Core в Windows 10 1909. Есть два способа обновления:

  • Можно вручную скачать msi установщик PowerShell Core на GitHub
  • Можно скачать и запустить установку (обновление) непосредственно из консоли PowerShell

Если вы хотите установаить PowerShell Core с помощью MSI пакета, перейдите на старицу проекта https://github.com/PowerShell/PowerShell, найдите последний релиз (на момент написания статьи это v7.0.0 Release of PowerShell от 4 марта, доступны также более новые v7.1.0-preview Release of PowerShell, но лучше пока не ставить их до выхода стабильной версии). Разверните список Assets и найдите пакет для вашей версии Windows (PowerShell-7.0.0-win-x64.msi или PowerShell-7.0.0-win-x86.msi).

Скачайте msi файл и установите его.

msiexec.exe /package PowerShell-7.0.0-win-x64.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1

Вы можете обновить PowerShell непосредственно из консоли.

Обновим (установим) последнюю версию PoSh Core с помощью команды:

  • -Destination – каталог установки PowerShell Core
  • -Preview – установка Preview версии
  • -Quiet – тихая установка
  • -AddToPath – добавить путь к каталогу установки PowerShell Core в переменные окружения

Данная команда загружает установочный MSI файл PowerShell 7.0 с GitHub и запускает установку, затем запускается установка через MSI Installer.

После окончания установки открывается окно PowerShell Core (pwsh.exe), проверьте версию PowerShell и убедитесь, что теперь это PoSh 7.0.0.

Если у вас установлен менеджер пакетов Chocolatey, вы можете установить или обновить версию PowerShell командами:

choco install powershell -y
choco upgrade powershell -y

Обратите внимание, что имя исполняемого файла среды PowerShell изменился. Теперь это c:Program FilesPowerShell7pwsh.exe . У него собственная иконка в меню Start.

  • Для запуска Windows PowerShell, основанного на .NET Framework используется команда powershell.exe
  • Для запуска PowerShell Core, основанного на .NET Core, нужно использовать команду pwsh.exe

Т.е. теперь на этом компьютере есть две версии: Windows PowerShell 5.1 и PowerShell Core 7.0

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector