我正在尝试编写一个 powershell 脚本来向 30 人发送带有几个附件的电子邮件。电子邮件是个性化的,因此必须单独发送。该脚本在没有附件的情况下运行良好。但是,当使用附件时,Send-MailMessage 的每个其他实例都会失败,并显示:
Send-MailMessage : 无法将数据写入传输连接:远程主机强行关闭了现有连接。
在发送消息之间等待/暂停多长时间似乎并不重要。即使我等了几分钟,第一个实例总是会成功,下一个会失败,下一个会成功,等等。我什至注意到在运行脚本之间,我对偶数或奇数的 ctrl+c 决定了成功Send-MailMessage 的第一个实例。如果最后一条消息失败,则第一条消息成功,反之亦然。
我的代码非常简单,我们只有一个包含所有用户的数组,并且
$array | foreach {
Write-Host "Sending Mail..."
Send-MailMessage -From 'myemail@domain' -To $_.EmailAddress
-SmtpServer 'fqdn'
-Attachments "1.pdf", "2.pdf"
-Subject 'Subject'
-Body ($html)
-BodyAsHtml
}
Run Code Online (Sandbox Code Playgroud)
因此,输出将类似于以下内容:
发送邮件...
发送邮件...
Send-MailMessage : 无法将数据写入传输连接:远程主机强行关闭了现有连接。
发送邮件...
发送邮件...
Send-MailMessage : 无法将数据写入传输连接:远程主机强行关闭了现有连接。
在没有错误的情况下,邮件会完好无损地到达。
我可以通过执行以下操作来“解决”这个问题:
try { Send-MailMessage ... -EA Stop }
catch { Send-MailMessage }
Run Code Online (Sandbox Code Playgroud)
结果,30/30 的人会收到邮件(而不是 15/30),因为每次尝试(除了 #1)都失败了,但是 catch 块中的代码总是能够成功。
当然,这不是一个真正的解决方案,我不想就这样离开它。有没有人对这里发生的事情有任何了解,以及如何解决它?
我要返回很多想要过滤的数据.酒店的名称包含此信息.我习惯于基于过滤| ? {$_.Name -eq 'Value'}.我希望能够使用隐藏.pscustomobject更动态地执行此操作.
$x = [pscustomobject]@{
atruevalue = 'sometext'
afalsevalue = 'sometext'
}
$x | ?{$_.psobject.Properties.Name -like '*true*'}
Run Code Online (Sandbox Code Playgroud)
我希望这会回来:
> atruevalue
> ----------
> sometext
Run Code Online (Sandbox Code Playgroud)
但是,它只返回对象中的每个项目.
有谁能解释这种行为?
假设我有以下内容:
(Get-Date).psobject.Properties.Name
Run Code Online (Sandbox Code Playgroud)
我可以使用变量来访问属性:
$x = Name
(Get-Date).psobject.Properties.$x
Run Code Online (Sandbox Code Playgroud)
但是,我不能使用$ x来“扩展”嵌套属性:
$x = 'psobject.Properties.Name'
(Get-Date).$x
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,Powershell会将$ x视为整个字符串都是文字属性名称。
我发现有很多资源以不同的方式访问带有特殊字符的属性,但是没有关于如何做相反的事情的资源。
这可能吗?如果没有,为什么?
$server = "SOME_SERVER"
$target = "8.8.8.8"
Invoke-Command -ComputerName $server -ScriptBlock { Test-Connection -ComputerName $target }
Run Code Online (Sandbox Code Playgroud)
所以我有这个代码,它给我一个错误
无法验证参数'ComputerName'的参数.参数为null或空.提供非null或空的参数,然后再次尝试该命令.
奇怪的是,如果我换$target到8.8.8.8最后一行,一切都很好.
有人可以向我解释一下吗?我一直在努力争取一个小时,并搜索互联网寻找答案,但没有找到任何解决方案.这是PowerShell中的某种错误吗?
BTW - 如果我调用$target它,它给了我8.8.8.8,类型是String,所以......