目前,我正在努力使用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”时,这就是我收到上述错误消息的时间。
以前有人看过吗?
任何帮助将不胜感激!
答案 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”。