переопределите подход командлета PowerShell и попросите сценарий PowerShell вручную обработать флаги?

#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. Я не писал код… его с сайта, который я цитировал. Это просто демонстрация, если вы хотите переопределить нормальное поведение параметров.