.net - powershell 循环返回一些不正确的值,但不是全部
问题描述
我有一个针对目录运行并在其中查找文件的脚本。根据包含内部扩展名的文件名部分,它会将文件通过电子邮件发送给相关用户。我有 90% 的工作,它会通过电子邮件向正确的人发送正确的文件,但电子邮件主题行中的变量是错误的。例如,给 Bob 的文件发送给 Bob,但电子邮件主题行指示 Joe 以及 Joe 呼叫的 CallerID。
$Path = 'c:\test2'
$delim = '-'
$delim2 = '@'
$Port = "587"
$SMTPUsername = "voicemails@test.com"
$EncryptedPasswordFile = "c:\test\voicemails.com.securestring"
$SecureStringPassword = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString
$EmailCredential = New-Object -TypeName Management.Automation.PSCredential($SMTPUsername,$SecureStringPassword )
$DestFolder = 'C:\test2\Processed'
#phone extensions & associated email address
$extensions = @{
'1000'= 'joe@test.com';
'23' = 'bob@test.com';
'765'= 'alice@test.com'
}
$File = Get-ChildItem $Path -Name
$File | Foreach-object {
$FirstName = $null
$nameArray = $_.Split($delim)
$newName = $nameArray[2]+" "+($nameArray[0].substring(0,8))
$ext = $nameArray[3]
$callerID = $nameArray[2]
$Datestamp = ($nameArray[0].substring(0,8))
$emailAddress = $extensions[$ext]
$FirstNameArray = $emailAddress.Split($delim2)
$FirstName = $FirstNameArray[0]
$SMTPMessage = @{
To = $emailAddress
From = 'voicemails@test.com'
Subject = $Subject
Smtpserver = '192.168.1.9'
}
$SMTPBody = 'Voicemail redirected message'
$Subject = "Call Recording on $Datestamp from ($CallerID) to $FirstName"
Send-MailMessage -Credential $EmailCredential @SMTPMessage -Body $SMTPBody -Attachments $_ -Port $Port
}
我正在运行它的一些示例文件名:
20180705072823-1530804495.22-15555552367-1000-Inbound.wav
20180705072823-1530804495.22-15555551234-23-Inbound.wav
20180705072823-1530804495.22-15555557791-765-Inbound.wav
我尝试将每个循环的值设置为 $null 但没有任何区别。
解决方案
这可能会发生,因为哈希表是在设置之前初始化$subject
的。
$SMTPMessage = @{
To = $emailAddress
From = 'voicemails@test.com'
Subject = $Subject # Uses old $subject
Smtpserver = '192.168.1.9'
}
# Set new subject
$Subject = "Call Recording on $Datestamp from ($CallerID) to $FirstName"
一个用于说明目的的简单示例:
$subject = "Subject 1"
$SMTPMessage = @{
To = 'Rec 1'
Subject = $subject
}
$SMTPMessage
$SMTPMessage = @{
To = 'Rec 2'
Subject = $subject
}
$subject = "Subject 2"
$SMTPMessage
Name Value
---- -----
To Rec 1
Subject Subject 1
To Rec 2
Subject Subject 1 # Uses the value before reassignment
推荐阅读
- python - 以有效的方式加入具有格式的元组列表
- css - Side horizontal lines with flexbox
- objective-c - 带有objective-c的Json反序列化在版权符号上失败
- influxdb - 迭代 InfluxDB 中的大量数据
- git - Github:使用 ssh 密钥仅在一个存储库或组织中使用
- javascript - 除了两小时前更新的文件外,如何查找文件?
- python - 在 scikit-learn 管道 [[feature selection] + [algorithm]] 上应用 gridsearch CV,但它给出以下错误:
- javascript - javascript中java的String.format的等价物是什么?
- node.js - 在计算机上本地存储 JWT 令牌的位置?
- python - 我在使用 pip 安装 pyinstaller 时遇到问题