2015-05-04 50 views
0

我有一个PowerShell脚本。执行此操作将创建与远程计算机的会话并在远程计算机内执行一些脚本块。执行后,我需要发送邮件。变量值从本地计算机传递到远程Pssession

所以,我得到所需的参数(如发件人,收件人,主题,正文,SMTP服务器证书)等本地如下图所示:

$param = @{ 
SmtpServer = 'SMTPServer' 
Port = 587 
UseSsl = $true 
Credential = $crede 
From = '[email protected]' 
To = '[email protected]' 
Subject = 'Hi' 
Body = "Hello" 
} 

$克雷德具有值(用户名明确给出,密码阅读从一个文本文件)。

我称之为PARAM如下图所示:

Send-MailMessage $using:param 

This is inside an Invoke-Command. 

但是当我运行这个程序,它要求我像来自于SMTP服务器等的邮件信息。请注意,这些值是在$ param上给出。我猜$参数值没有被传递到远程会话。

有人可以支持我。任何帮助将非常感激。

+1

您是否试过'发送邮件消息@using:param'? –

+0

无法看到你的Invoke-Command看起来像什么..... – Colyn1337

+0

@ MathiasR.Jessen:是的,但结果相同。 – serverstackqns

回答

1

我刚刚有一个类似的问题。

$processName = myProcess.exe 
$session = New-PSSession -ComputerName $anycomputer -Credential $credentials 

# powershell syntax requires -Scriptblock and { on this line 
Invoke-Command -Session $session -ScriptBlock { 
    param([string] $processName) 
    Get-Process -Name $processName 
} -Args $processName 

Remove-PSSession $session 
+0

已经试过这个,但似乎没有工作。我的场景(如我已经说过的)是: 计算机A执行脚本A并创建与计算机B的会话,并在B中执行脚本。现在,如果脚本执行成功,我想发送类似标志值的东西回到计算机A(通过删除会话)。现在我需要计算机A来调用驻留在本地机器上的脚本。 对我而言,第三个脚本是在第二个计算机本身调用的,尽管我已经编写了代码中的remove-session。 对此有何帮助? – serverstackqns

0

$ processName = myProcess.exe $会议=新的PSSession -ComputerName $ anycomputer -Credential $凭据

调用命令-Session $ {会话获取进程-Name $使用:processName}

+0

如果您需要将本地会话中的变量传递给嵌套的脚本块,则需要在第一个脚本块中声明该变量。 您可以使用$ using:variable在第一个脚本块中的本地会话中声明变量,然后通过使用... $ using:variable在下一个脚本块中使用它。 $只使用一个深。 –

相关问题