powershell - 无法使用 Invoke-Command 将参数哈希表传递给另一个脚本
问题描述
我已经构建了一个脚本,用于动态更改 HTML 模板并将其作为电子邮件发送,它使用哈希表来更改项目,因为它可能需要更改的项目数量波动(似乎比数组更好)
变量等的电子邮件发送和替换都正常工作,我遇到的问题是当我尝试从另一个脚本调用它并传入带有替换和 to/fromsubject 的哈希表时,我正在使用 Splatting,因为它似乎最好的选择,我尝试按原样传入哈希表,并尝试了 start-job 和 Invoke-Expression
PowerShell版本:5.1
这是我用来调用电子邮件脚本的代码
$TemplateReplacements = @{}
$TemplateReplacements.Add("EmailTo","firstname.lastname@company.com.au")
$TemplateReplacements.Add("EmailFrom","ISnotifications@company.com.au")
$TemplateReplacements.Add("EmailSubject","Test Test Test")
$TemplateReplacements.Add("EmailTemplate","\ZeroLicenses.html")
$TemplateReplacements.Add("Heading","Heading replaced from main script")
$TemplateReplacements.Add("1","Variable1 repalced from main script")
$TemplateReplacements.Add("2","Variable2 replaced from main script")
$TemplateReplacements.Add("3","Variable3 replaced from main script")
$TemplateReplacements.Add("4","Variable4 replaced from main script")
$ScriptToRun = "C:\Users\User1\Desktop\Projects\Powershell\EmailVarReplace-Test\Test3.ps1"
$params = @{
Replacements = $TemplateReplacements
}
Invoke-Command $ScriptToRun @Params
#start-job $ScriptToRun @params
在被调用的电子邮件脚本中,我在顶部有这个我相信我需要它来接受参数?
[CmdletBinding()]
param ($Replacements)
我已经为此困扰了很久,只是不断收到错误
Invoke-Command : A parameter cannot be found that matches parameter name 'Replacements'.
At C:\Users\User1\Desktop\Projects\Powershell\EmailTest.ps1:19 char:29
+ Invoke-Command $ScriptToRun @Params
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.InvokeCommandCommand
我期望发生的事情是将哈希表传递到脚本中,这样它就可以获取将电子邮件发送到何处、来自哪个地址、主题以及电子邮件中变量替换的变量
我将电子邮件脚本构建为独立模块,稍后只需要创建模板和脚本调用它并进行替换
任何帮助将不胜感激
也忽略硬编码路径等,因为它仍然是一个测试脚本:p
解决方案
不要Invoke-Command
用来调用您的脚本-Invoke-Command
实际上只在远程处理的上下文中有用,即如果您使用-ComputerName
参数在一台或多台远程计算机上运行脚本块的脚本。
相反,使用调用运算符&
来调用您的脚本,然后喷溅应该按预期工作:
& $ScriptToRun @Params
至于你尝试了什么:
如果您尝试通过 喷溅Invoke-Command
,则喷溅将应用于其参数,而不是您正在调用的脚本的参数。
因此,在's 的-Replacements
参数而不是你的脚本的参数中寻找一个参数- 并且没有这样的参数,这解释了你得到的错误。Invoke-Command
推荐阅读
- git - 当某些文件更改时,自动请求更改 Github 上的 PR
- python - 如何解决错误“无法从'serial'(未知位置)导入名称'serial'”?
- node.js - OverwriteModelError:编译后无法覆盖“用户”模型
- javascript - 如何使用纯 JavaScript 将值设置为对象内的参数?
- windows - 如何通过 CMD 禁用 MicrosoftWindowsPowerShellV2Root?
- amazon-web-services - AWS Lambda / API Gateway - 调用允许经过身份验证和未经身份验证的请求的函数的最佳方式是什么?
- javascript - 将 JSX 分配给变量时是否忽略括号
- java - A question about Producer-Consumer Model in Java
- r - 如何进行二维边距分布?
- python - 逐个单元格比较 Pandas 数据框时的性能问题