Как запустить список функций в цикле foreach в powershell? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть текстовый файл, в котором перечислены несколько функций для выполнения проверок на сервере SQL.Я проверил каждую функцию и убедился, что они работают.Я пишу сценарий управления как psm1 и для вызова всех функций, но они не запускаются.все, что я получаю, это список функций на хосте, но ни один из выходных данных, которые записываются в функции.Я не уверен, что я делаю неправильно.Часть кода, с которой у меня возникают проблемы, выглядит следующим образом:

$funcList = Get-Content $Home\Documents\WindowsPowerShell\CheckList.txt
foreach ($fl in $funcList) {
        Import-Module $Home\Documents\WindowsPowerShell\$fl\$fl.psm1
        $check = "$fl -ComputerName $ComputerName -UserName $UserName -Output_Path $Output_Path -SystemName $SystemName"
        $check
        }

Я также попытался поместить все параметры в переменную, так как

$params = "-ComputerName $ComputerName -UserName $UserName -Output_Path $Output_Path -SystemName $SystemName"
$check = $fl + $params

Я смог его получитьчтобы составить список каждой проверки следующим образом:

if (!(Test-Path -Path "$Home\Documents\WindowsPowerShell\check1" )) {
        Import-Module $Home\Documents\WindowsPowerShell\check1\check1.psm1
        check1 -ComputerName $ComputerName -UserName $UserName -Output_Path $Output_Path -SystemName $SystemName
        Write-Host "check1 complete"} 

У меня есть другой скрипт, который помещает все функции и контрольный список в папки пользовательских модулей powershell.единственная другая часть - это необходимые параметры.

файл контрольного списка может быть txt или csv.

1 Ответ

0 голосов
/ 13 сентября 2018

Функции должны вызываться с использованием имени функции, и синтаксический анализатор должен рассматривать эту строку как имя функции.Все, что начинается с одинарных / двойных кавычек, рассматривается в PowerShell как строки.

Используйте оператор вызова & для вызова функции, когда имя находится в переменной.

$funcList = Get-Content $Home\Documents\WindowsPowerShell\CheckList.txt
foreach ($fl in $funcList) {
        Import-Module $Home\Documents\WindowsPowerShell\$fl #no need to point to .psm1.
        & $fl -ComputerName $ComputerName -UserName $UserName -Output_Path $Output_Path -SystemName $SystemName"

        }
...