我已经构建了一个脚本,用于动态更改HTML模板并将其作为电子邮件发送,由于需要更改的项目数量波动,因此它使用哈希表来更改要更改的项目(似乎比它更好。数组)
通过电子邮件发送和替换变量等都可以正常工作,而我遇到的问题是,当我尝试从另一个脚本中调用它,并在哈希表中传递替换内容并传递给/从主题时,我正在使用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
我期望发生的事情是将哈希表传递到脚本中,这样它就可以获取将电子邮件发送到的位置,来自何地址,主题以及电子邮件中变量替换的变量
我将电子邮件脚本构建为一个独立的模块,以后只需要模板创建的adn脚本,并用替换后的脚本对其进行调用
任何帮助将不胜感激
也请忽略硬编码路径等,因为它仍然是测试脚本:p
答案 0 :(得分:1)
不要使用Invoke-Command
来调用脚本-Invoke-Command
实际上仅在 remoting 的上下文中有用,例如,如果您与-ComputerName
参数一起使用,可以在一台或多台远程计算机上运行脚本块的脚本。
相反,使用call operator &
来调用您的脚本,然后按预期进行拼写即可
& $ScriptToRun @Params
关于您尝试过的事情:
如果您尝试通过Invoke-Command
进行喷溅,则该喷溅将应用于其参数,而不应用于您正在调用的脚本的参数。
因此,将在 -Replacements
的参数中查找Invoke-Command
参数,而不是在脚本的参数中查找-并且没有这样的参数,这说明了您得到的错误。