Как передать необходимые параметры в script в PowerShell ISE?

См. раздел "Название".

Я указал необходимые параметры в заголовке script:

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

Когда я хочу отлаживать script с помощью PowerShell ISE: как я могу заполнить эти параметры?

Ответ 1

Используйте панель команд. Откройте файл script в редакторе ISE, установите точки останова (F9). Затем в панели команд введите команду script с требуемыми параметрами. Я не думаю, что в ISE есть другой (встроенный) способ сделать это.

Ответ 2

  • Откройте script (myscript.ps1) в Windows PowerShell ISE
  • Нажмите F9 на переменную, которую вы хотите проверить (отладить). Например, вторая строка в примере ниже, где назначается переменная $outputText
  • В окне оболочки укажите относительный путь script вместе с значением параметра. Например:.\Myscript.ps1 "my value"
  • Нажмите Enter (вам не нужно нажать F5)
  • Вы сможете увидеть отладочные точки останова, выделенные желтым цветом. Поместите курсор на нужную переменную, чтобы проверить текущее значение.

A sample showing PowerShell debugging with ISE and command parameter

Ответ 3

Есть и другой способ. Вы можете использовать автоматическую переменную $PSDefaultParameterValues, которая существует (начиная с версии v3) для предоставления новых аргументов по умолчанию для командлетов и расширенных функций (не работает с обычными функциями). Однако он работает для скриптов, даже при отладке в ISE.

Итак, для вашего примера

param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))

вы выполнили бы что-то подобное в запросе ISE:

$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")

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

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}

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

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

Другими вариантами использования для $PSDefaultParameterValues могут быть настройки, например, если Get-History получает только последние 10 записей, если вы не укажете параметр -Count в команде. Поскольку записи сохраняются только для текущего сеанса, вы хотели бы добавить настройки в профиль. Вы можете прочитать больше, набрав Get-Help about_Parameters_Default_Values в приглашении или просмотрите ту же информацию на TechNet.

Ответ 4

Существует гораздо более простой способ установки необходимых параметров в ISE:

Прежде чем нажимать F5 в ISE, установите необходимый параметр. Я обычно комментирую параметр, который мне нужен, например:   # $G_ARCHIVE = "C:\Temp\TestFile_001.txt"

Я выбираю все после "#" и нажимаю F8. В следующий раз, когда я отлаживаю script с F5, параметру присваивается значение, которое я тестирую, нет необходимости передавать параметры через командную строку.