【发布时间】:2017-11-15 09:29:59
【问题描述】:
当我从命令行运行我的 Powershell 脚本时,它会失败,但是如果我逐行复制并在 Powershell 控制台中运行它,它运行良好。
powershell -ExecutionPolicy Bypass -File "F:\email.ps1" -FFFeatureOff
产量:
在 F:\email.ps1:16 char:126 + ... ential("用户名", "密码"); + ~~~ 字符串缺少终止符:".
在 F:\email.ps1:9 char:1 + { + ~ 在语句块或类型定义中缺少结束“}”。
如果我打开 powershell 窗口并粘贴脚本,它真的很奇怪,它可以工作,但是运行 ps1 文件我得到错误,即使在编辑器中我也会遇到同样的问题
完整脚本:
$EmailTo = "xxxxx"
$EmailFrom = "xxxxxx"
$Subject = "LicenceKey & Instructions"
$Body = "This is an automated email"
$SMTPServer = "smtp.gmail.com"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$files=Get-ChildItem "C:\Users\alber\Desktop\LicenceKey\newuser"
Foreach($file in $files)
{
Write-Host “Attaching File :- ” $file
$attachment = New-Object System.Net.Mail.Attachment –ArgumentList "C:\Users\alber\Desktop\LicenceKey\newuser\$file"
$SMTPMessage.Attachments.Add($attachment)
}
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username", "password");
$SMTPClient.Send($SMTPMessage)
【问题讨论】:
-
这可能与this 重复,因为与
Attaching File一致,您似乎有不同的引号。另一种可能性是,例如密码包含双引号。他们需要使用 ` 进行转义 -
与几乎所有其他语言不同,Powershell 可以使用智能引号
“ ”。我个人不使用它们,但这是 PS 之前的习惯。 -
您发布的脚本没有解释您的症状。顺便说一句:调用 cmdlet 时最好避免使用方法语法;例如,代替
New-Object System.Net.NetworkCredential("username", "password")调用New-Object System.Net.NetworkCredential -ArgumentList "username", "password"。 -
脚本文件应包含 BOM 以便正确识别 UTF8。
标签: powershell