Добрый день!
Необходимо: на Windows автоматизиировать отправку файлов по почте из определенной папки отдельными письмами, так чтобы одно письмо- один файл.
Из нюансов: Путь к папке содержит русские буквы и квадратные скобки.
Был написан простой скрипт на PS:
$filename = "sendmail.log"
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #Директория где запущен скрипт, без последнего "\"
$path = $scriptPath + "\" + $filename
function logging ($LogMessage){
"$(Get-Date -UFormat "%d-%m-%Y %T") $LogMessage"|out-file $path -Append
}
function SendMailToUser($To,$ErrorTo) {
$From="email@test.ru"
$Subject="Invoice"
$Body="Invoice"
$Password="12345"
$SecPassword=New-Object -TypeName System.Security.SecureString
$Password.ToCharArray() | foreach {$SecPassword.AppendChar($_)}
$Credintial=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $From,$SecPassword
$smtpServer="test.ru"
$encoding = [System.Text.Encoding]::UTF8
$InvoicesPath = 'B:\TEMP\рус[1]\*'
$invoices = Get-ChildItem $InvoicesPath | % { $_.FullName }
foreach ($invoice in $invoices)
{try{
Send-MailMessage -From $From -To $To -Subject $Subject -Body $Body -Credential $Credintial -SmtpServer $smtpServer -Attachments $invoice -Encoding $encoding -ErrorAction Stop
logging -LogMessage "$Invoice sent successfully"
Remove-Item $invoice
logging -LogMessage "$Invoice cleared successfully"
}
catch{
$ErrorSubject="Error sending: $invoice"
$ErrorBody="$(Get-date)111 Error:$($Error[0])"
Send-MailMessage -From $From -To $ErrorTo -Subject $ErrorSubject -Body $ErrorBody -Credential $Credintial -SmtpServer $smtpServer -Encoding $encoding
logging -LogMessage "$Invoice was not send! Error:$($Error[0])"
}
}
}
SendMailToUser -To "1@test.ru" -ErrorTo "2@test.ru"
При выполнении выдает ошибку:
Get-ChildItem : Не удается найти путь "B:\TEMP\С?С?С?", так как он не существует.
C:\bin\sendmail.ps1:28 знак:17
+ $invoices = Get-ChildItem $InvoicesPath | % { $_.FullName }
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (B:\TEMP\С?С?С?:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Пробовал использовать get-childitem параметр -LiteralPath, не помогло, разные символы экранирования и тд. Прошу вашей помощи, уже не знаю куда дальше копать. С путем латинскими буквами работает.