PowerShell «Не удается разрешить набор параметров» при вызове другого сценария - PullRequest
0 голосов
/ 05 июля 2018

Я сейчас пытаюсь вызвать второй сценарий в одном из моих сценариев PowerShell, используя Invoke-Expression. В настоящее время выдает ошибку:

"Набор параметров не может быть разрешен с использованием указанных именованных параметров."

Досадно, что он отлично работает для одного коммутатора (будучи -ServerDriveReport), но не работает для другого.

Первый скрипт (называемый DriveReport.ps1) выглядит так:

[cmdletbinding()]
Param(
    [Parameter(ParameterSetName="ServerDriveReport")]
    [switch]$ServerDriveReport,

    [Parameter(ParameterSetName="VMDriveReport")]
    [switch]$VMDriveReport)

If($ServerDriveReport){
Invoke-Expression "& 'C:\Scripts\Drive Report\EmailDriveReport.ps1' -ServerDriveReport"}

If($VMDriveReport){
Invoke-Expression "& 'C:\Scripts\Drive Report\EmailDriveReport.ps1' -VMDriveReport"}

Сценарий «EmailDriveReport.ps1» выглядит так:

[cmdletbinding()]
Param(
    [Parameter(ParameterSetName="ServerDriveReport")]
    [switch]$ServerDriveReport,

    [Parameter(ParameterSetName="VMDriveReport")]
    [switch]$VMDriveReport)

If($ServerDriveReport){
# Send an email containing the server drive report}

If($VMDriveReport){
# Send an email contining the VM drive report}

При запуске «DriveReport.ps1 -ServerDriveReport» все работает как положено. Но при запуске «DriveReport.ps1 -VMDriveReport» я получаю вышеупомянутое сообщение об ошибке.

Кто-нибудь видел это раньше?

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Спасибо за помощь! Мне удалось решить эту проблему, внимательно изучив сценарий и обнаружив, что одно из утверждений Else неправильно вызывает файл. Теперь я изменил это на: & 'C: \ Scripts \ Drive Report \ EmailDriveReport.ps1', как было предложено.

0 голосов
/ 05 июля 2018

Не пытаясь решить вашу непосредственную проблему (что не очевидно для меня из опубликованного кода), рассмотрите возможность использования автоматической переменной $PSBoundParameters через splatting для передачи параметров через на второй сценарий:

[cmdletbinding()]
Param(
    [Parameter(ParameterSetName="ServerDriveReport")]
    [switch]$ServerDriveReport,

    [Parameter(ParameterSetName="VMDriveReport")]
    [switch]$VMDriveReport)
)

& 'C:\Scripts\Drive Report\EmailDriveReport.ps1' @PSBoundParameters

Как правило, Invoke-Expression следует избегать, потому что обычно существуют более надежные решения и потому, что он представляет угрозу безопасности, если вызывается для ненадежных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...