替换PowerShell对象中的文本

时间:2015-05-11 07:15:07

标签: powershell

我在项目中受到限制,必须使用PowerShell从Outlook生成和发送电子邮件。

param([string]$address, [string]$subject);
$Outlook = New-Object -ComObject Outlook.Application;
$Mail = $Outlook.CreateItemFromTemplate("D:\Users\mark\test.oft");
$Mail.To = "$address";
$Mail.Subject = "$subject";
$Mail.Send();

我使用的是经常使用的模板文件,因为我必须包含公司徽标嵌入图片。

但是我的问题是我需要更改电子邮件的某些部分,但保留嵌入式图形和格式。

在PowerShell中是否有传递(例如)参考ID参数的方法 - 并在OFT文件的正文中替换,#RefID#用"参考ID"例如:

param([string]$address, [string]$subject, [string]$RefID);
$Outlook = New-Object -ComObject Outlook.Application;
$Mail = $Outlook.CreateItemFromTemplate("D:\Users\mark\test.oft");
****
$Mail.Body = $Mail.Body.Replace("#RefID#", $RefID)
****
$Mail.To = "$address";
$Mail.Subject = "$subject";
$Mail.Send();

上面的.Replace似乎删除了格式,并用" CID代替徽标:...."

应该是什么样的:

使用替换后的样子:

How it looks after using Replace

感谢您的帮助,

标记

2 个答案:

答案 0 :(得分:3)

我不太清楚我明白你要做什么。是否要使用变量#RefID#的值替换邮件正文中的文字字符串$RefID?如果是这样,可以这样做,但你需要在正确的地方(邮件正文)进行:

$Mail.Body = $Mail.Body.Replace("#RefID#", $RefID)

如果是HTML电子邮件,您可能需要修改HTMLBody属性而不是Body属性:

$Mail.HTMLBody = $Mail.HTMLBody.Replace("#RefID#", $RefID)

答案 1 :(得分:1)

您可以尝试几种选择。它们都应该用来替换文件中的文本。

1)

$file = "D:\users\mark\test.oft"
(Get-Content $file).Replace("#RefID","$RefID") | Set-Content $file

2)

   (Get-Content $file) | 
    Foreach-Object {$_ -replace "#RefID","$RefID"}  | 
    Out-File $file