#powershell
Вопрос:
Есть ли способ переопределить подход командлета PowerShell и заставить сценарий PowerShell вручную обрабатывать аргументы сценария?
Мне просто нужен простой пример сценария Powershell, который использует классический подход C/perl с использованием «GetOptions» для обработки флагов аргументов сценария вручную. Вместо того, чтобы разбивать все на «Команды-позволяет», так как в моем случае я не забочусь об интеграции моего сценария с оболочкой и возврате объектов для других команд-позволяет и т.д… Это всего лишь одноразовый случай использования, когда классический подход был бы лучше, чем использование команд…
Комментарии:
1. «поскольку в моем случае меня не волнует интеграция моего сценария с оболочкой и возврат объектов для других команд-let» — тогда зачем вообще использовать PowerShell? 🙂
2. потому что мне нужно использовать Powershell для запуска некоторых сценариев Git Bash с помощью Powershell «Invoke-Command»
3. Ну, причина, по которой в PowerShell нет легкодоступного
getoptions()
, заключается в том, что у PowerShell уже есть синтаксический родственник —param()
блок. Ознакомьтесь с разделомabout_Functions_Advanced_Parameters
справки4. Там также есть
$Args
Ответ №1:
Вот пример:
Файл: script.ps1
param ($servername, $envname='Odyessy')
if ($servername -eq $null) {
$servername = read-host -Prompt "Please enter a servername"
}
write-host "If this script were really going to do something, it would do it on $servername in the $envname environment"
Пример:
.script.ps1 -servername HAL
.script.ps1 -envname Discovery
Также Смотрите:
https://www.red-gate.com/simple-talk/sysadmin/powershell/how-to-use-parameters-in-powershell/
Комментарии:
1. Я не вижу никакой пользы в том, чтобы идти на такой низкий уровень. Нет необходимости
read-host
в и т.д., В Powershell вы просто сделаете параметр «Обязательным», и PowerShell выполнит эту логику «чтения с хоста» за вас.2. Я не писал код… его с сайта, который я цитировал. Это просто демонстрация, если вы хотите переопределить нормальное поведение параметров.