调用其他脚本时,PowerShell“无法解析参数集”

时间:2018-07-04 22:15:45

标签: powershell parameters

目前,我正在努力使用Invoke-Expression在我的一个PowerShell脚本中调用第二个脚本。当前正在产生错误:

“无法使用指定的命名参数来解析参数集。”

令人讨厌的是,它对于一个开关(即-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 :(得分:1)

在不尝试解决您的紧迫问题(从发布的代码对我来说并不明显)的情况下,请考虑通过splatting使用自动status变量来将参数传递给第二个脚本: / p>

$PSBoundParameters

通常应避免使用[cmdletbinding()] Param( [Parameter(ParameterSetName="ServerDriveReport")] [switch]$ServerDriveReport, [Parameter(ParameterSetName="VMDriveReport")] [switch]$VMDriveReport) ) & 'C:\Scripts\Drive Report\EmailDriveReport.ps1' @PSBoundParameters ,因为通常会有更健壮的解决方案可用,并且如果在不受信任的字符串上调用它会带来安全风险。

答案 1 :(得分:0)

感谢您的帮助! 我设法通过仔细遍历脚本并找出其中一个Else语句未正确调用文件来解决此问题。我现在将其更改为: 和“ C:\ Scripts \ Drive Report \ EmailDriveReport.ps1”。