#powershell
#powershell
Вопрос:
Мне нужна помощь в расширении этого сценария. В принципе, мне нужно добавить, когда $inputFileName = ‘Report.txt ‘ не находится в каталоге по умолчанию, когда скрипт запускается каждое утро, задание выдает электронное письмо с сообщением об отсутствии файла для обработки, а затем задание останавливается. Я вижу, что время от времени, когда в исходном каталоге нет файла, задание выполняется, прикрепляя пустой файл .xls, который бесполезен. Я заранее признателен за ЛЮБУЮ помощь!
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path C:PATHLogoutput.txt -append
$emailFilePath = 'C:PATHPATH'
$inputFilePath = 'C:PATHPATHUpload'
$inputFileName = 'Report.txt'
$inputFile = Join-Path $inputFilePath $inputFileName
$outputFileName = 'Report.csv'
$outputFilePath = 'C:PATHPATHSend'
$OutputFile = Join-Path $outputFilePath $outputFileName
$folder = 'C:PATHPATHUpload'
$filter = 'Report.txt'
$destination = $outputFilePath
$dateTime1 = Get-Date -Format s
Write-Host "The file was received: $dateTime1"
Import-CSV $inputFile -Delimiter "`t" -Header "Value 1" , "Value 2" , "Value 3" , "Value 4" , "Value 5" | Tee-Object -Variable Report.txt | Export-CSV $OutputFile -Delimiter "," -NoTypeInformation
$xl = new-object -comobject excel.application
$xl.visible = $false
$Workbook = $xl.workbooks.open("$OutputFile")
$Worksheets = $Workbooks.worksheets
$Workbook.SaveAs("$outputFilePathReport.xls",1)
$Workbook.Saved = $True
$xl.Quit()
$objExcel = new-object -comobject excel.application
$objExcel.Visible = $false
$objWorkbook = $objExcel.Workbooks.open("$outputFilePathReport.xls")
$objWorksheet = $objWorkbook.Worksheets.Item(1)
$objRange = $objWorksheet.UsedRange
[void] $objRange.EntireColumn.Autofit()
$objWorkbook.SaveAs("$outputFilePathReport.xlsx",51)
$objWorkbook.Saved = $True
$objExcel.Quit()
$fromaddress = "user@domain.com"
$toaddress = "user@domain.com"
$bccaddress = ""
$CCaddress = "user@domain.com"
$Subject = "Here Is The Report"
$body = get-content $emailFilePathcontent.htm
$attachment = "$outputFilePathReport.xlsx"
$smtpserver = "smtpdomain"
$message = new-object System.Net.Mail.MailMessage
$message.From = $fromaddress
$message.To.Add($toaddress)
$message.CC.Add($CCaddress)
#$message.Bcc.Add($bccaddress)
$message.IsBodyHtml = $True
$message.Subject = $Subject
$attach = new-object Net.Mail.Attachment($attachment)
$message.Attachments.Add($attach)
$message.body = $body
$smtp = new-object Net.Mail.SmtpClient($smtpserver)
$smtp.Send($message)
$dateTime2 = Get-Date -Format s
Write-Host "The file was parsed and emailed at $dateTime2"
Start-Sleep -Seconds 60
$message.Dispose()
Start-Sleep -Seconds 60
kill -processname Excel
Start-Sleep -Seconds 60
Remove-Item "C:PATHPATHSend*.*"
$filenameFormat = "Report" "" (Get-Date -Format "yyyy-MM-dd") ".txt"
$updatedFile = "C:PATHPATHUpload" $filenameFormat
Rename-Item -Path "C:PATHPATHUploadReport.txt" -NewName $filenameFormat
Move-Item -Path $updatedFile -Destination C:PATHPATHArchivedReportData
Stop-Transcript
exit
Комментарии:
1. Тестовый путь должен сделать это за вас
Ответ №1:
Вам необходимо проверить файл перед обработкой следующим образом:
If ( -not (Test-Path -Path "inputFile")) {
#Write your file not found logic/messages here
Exit
}
Import-CSV $inputFile -Delimiter "`t" -Header "Value 1" , "Value 2" , "Value 3" , "Value 4" , "Value 5" | Tee-Object -Variable Report.txt | Export-CSV $OutputFile -Delimiter "," -NoTypeInformation
$dateTime1 = Get-Date -Format s
Write-Host "The file was received: $dateTime1"
...
HTH