Вызов нескольких функций через параметры при запуске скрипта .ps1 - PullRequest
0 голосов
/ 03 июля 2019

У меня есть скрипт .ps1, в котором есть несколько функций.Вместо того, чтобы запускать их все сразу, я бы хотел, чтобы пользователь мог указать, какие функции он хотел бы запустить.например: ./script.ps1 -func1 -func2 или ./script.ps1 -All

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

Вот то, что я сейчас работаю, но я не уверен, смогу ли я каким-то образом его оптимизировать.

[CmdletBinding()]
Param(
      [Parameter(Mandatory=$false)][String]$Param1,
      [Parameter(Mandatory=$false)][String]$Param2
    )
function Test
{
Write-Host "Test Success"
}
function All
{
Write-Host "All Success"
}
If ($Param1 -eq "Test" -or $Param2 -eq "Test")
{
Test
}
If ($Param1 -eq "All" -or $Param2 -eq "All")
{
All
}

Вместо этогоя просто смотрю, как пользователь вводит функцию в качестве параметра.

Я уверен, что есть способ сделать это с помощью переключателя или массива.но я не большой программист.

1 Ответ

0 голосов
/ 03 июля 2019

мой быстрый подход заключается в следующем.Я определяю параметр switch для каждой функции и один для «all», так как я предполагаю, что порядок не требуется.

[CmdletBinding()]
Param(
      [Parameter(Mandatory=$false)][switch]$Func1=$false,
      [Parameter(Mandatory=$false)][switch]$Func2=$false,
      [Parameter(Mandatory=$false)][switch]$All=$false
    )

function Func1 {
    Write-Host "Func1 called"
}

function Func2 {
    Write-Host "Func2 called"
}

function All {
    Write-Host "All called"
}

If ($Func1) {
    Func1
}

If ($Func2) {
    Func2
}

If ($All) {
    All
}

для вызова скрипта, который вы можете затем запустить

./script.ps1 -Func2

или

./script.ps1 -Func1 -Func2

или

./script.ps1 -All
...