Як передати необхідні параметри сценарію в Powershell ISE?


75

Див. Заголовок.

Я вказав необхідні параметри в голові сценарію:

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

Коли я хочу налагодити сценарій за допомогою Powershell ISE: як я можу заповнити ці параметри?

Відповіді:


79

Використовуйте панель команд. Відкрийте файл скрипта в редакторі ISE, встановіть точки зупинку (F9). Потім на панелі команд введіть команду, що викликає цей сценарій із необхідними параметрами. Я не думаю, що існує інший (вбудований) спосіб зробити це в ISE.


7
Цей підхід у мене не спрацював, оскільки мій шлях до файлу мав пробіли, рішення полягало в тому, щоб використовувати функцію "амперсанд" наступним чином: PS C: \ Windows> & ("c: \ my folder \ script.ps1" ) -myArg 123 -antherArg abc
Еміль Г

1
Ви насправді можете використовувати відносний шлях:. \ Script.ps1
Ашраф Алам

28
  1. Відкрийте сценарій (myscript.ps1) у Windows Powershell ISE
  2. Натисніть F9на змінну, яку ви хочете перевірити (налагодження). Наприклад, 2-й рядок у зразку нижче, де присвоюється змінна $ outputText
  3. У вікні оболонки вкажіть відносний шлях до сценарію разом із значенням параметра. Наприклад:. \ Myscript.ps1 "моє значення"
  4. Натисніть Enter (натискати не потрібно F5)
  5. Ви зможете побачити точки зупинки налагодження, виділені жовтим кольором. Наведіть курсор на потрібну змінну, щоб перевірити поточне значення.

Зразок, що показує налагодження PowerShell за допомогою ISE та командного параметра


2
чим ця відповідь відрізняється від прийнятої?
eckes

5
Думка про пояснення деталей з ілюстрацією буде корисною для інших. Наприклад, потрібно вказати відносне (або абсолютне) місце розташування, яке спочатку не було вказано.
Ашраф Алам

16

Є й інший шлях. Ви можете використовувати $PSDefaultParameterValuesавтоматичну змінну, яка існує (починаючи з v3), щоб надати нові аргументи за замовчуванням командлетам та розширеним функціям (не працює з нормальними функціями). Однак це працює для скриптів, навіть під час налагодження в ISE. Ви повинні задекларувати [CmdletBinding()]або [Parameter()]подібно до розширеної функції.

Отже, для вашого прикладу,

[CmdletBinding()]
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")

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

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

Змінна є хеш-таблицею, і застосовується весь стандартний синтаксис, за винятком того, що ключ повинен мати ім'я сценарію (або розширеної функції або командлета), за яким слід двокрапка, а потім ім'я параметра. Ви можете встановити значення за замовчуванням для декількох сценаріїв або команд, а також кілька параметрів для кожного (кожен параметр є новим записом таблиці).

Роблячи це таким чином, ви можете просто натиснути, F5щоб запустити свій сценарій як зазвичай. Параметри будуть взяті зі змінної, тому вам не потрібно нічого вводити.

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


Ще один приклад блоку сценарію. Ви можете мати, щоб ваш скрипт автоматично використовував найновіший zip-файл. $PsDefaultParameterValues=["ExampleScript.ps1:G_ARCHIVE"]={(ls *.zip | sort lastwritetime | select -last 1).fullname}Такі речі надзвичайно корисні, коли ви постійно створюєте нові версії деяких наборів зовнішніх даних для тестування та налагодження вашого сценарію.
PatrickFranchise

$ PSDefaultParameterValues.Item ("KEY") = "VALUE" є ще однією альтернативою
RichardOD

1
Це працює лише в сценаріях, коли параметри оголошуються за допомогою [Parameter()]декоратора, чого не скажеш у прикладі @eckes.
Лоран КАПРАНІ

Ти маєш рацію. Я згадав, що це повинна бути розширена функція, але не те, що вам потрібно було зробити те саме зі сценарієм.
PatrickFranchise

-2

Існує набагато простіший спосіб встановити необхідні параметри в ISE:

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

Я вибираю все після "#" і натискаю F8. Наступного разу, коли я налагоджую сценарій F5, параметру встановлюється значення, з яким я тестую, не потрібно передавати параметри через командний рядок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.