【发布时间】:2011-11-01 08:41:09
【问题描述】:
我是使用 powershell 编写的新手,但这是我想要完成的。
- 我想比较两个 Excel 文件的日期以确定一个是否比另一个新。
- 我想在没有 excel 的计算机上将文件从 csv 转换为 xls。只有当上面的陈述为真时,初始的 xls 文件已经被复制了。
- 我想将新转换的 xls 文件复制到另一个位置
- 如果文件已经打开,它将无法复制,所以我想发送一封电子邮件提醒此操作成功或失败。
这是我遇到问题的脚本。错误是“表达式只允许作为管道的第一个元素。”我知道这与电子邮件操作有关,但我不知道如何在包含所有这些变量的情况下手动写出来。可能还有更多错误,但我现在没有看到它们。感谢您的帮助,我很感激!
$CSV = "C:filename.csv"
$LocalXLS = "C:\filename.xls"
$RemoteXLS = "D:\filename.xls"
$LocalDate = (Get-Item $LocalXLS).LASTWRITETIME
$RemoteDate = (Get-Item $RemoteXLS).LASTWRITETIME
$convert = "D:\CSV Converter\csvcnv.exe"
if ($LocalDate -eq $RemoteDate) {break}
else {
& $convert $CSV $LocalXLS
$FromAddress = "email@address.com"
$ToAddress = "email@address.com"
$MessageSubject = "vague subject"
$SendingServer = "mail.mail.com"
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SendEmailSuccess = $MessageBody = "The copy completed successfully!" | New-Object System.Net.Mail.SMTPClient mail.mail.com $SMTPMessage
$RenamedXLS = {$_.BaseName+(Get-Date -f yyyy-MM-dd)+$_.Extension}
Rename-Item -path $RemoteXLS -newname $RenamedXLS -force -erroraction silentlycontinue
If (!$error)
{ $SendEmailSuccess | copy-item $LocalXLS -destination $RemoteXLS -force }
Else
{$MessageBody = "The copy failed, please make sure the file is closed." | $SMTPClient.Send($SMTPMessage)}
}
【问题讨论】:
-
我不确定您要在这一行上完成什么: $SendEmailSuccess = $MessageBody = "复制成功完成!" | New-Object System.Net.Mail.SMTPClient mail.mail.com $SMTPMessage 但我想这是错误的罪魁祸首。
-
@meep - 不要编辑内容。那时你的问题根本没有意义。即使您已经弄清楚了,这对未来的访问者也会很有用。附加您的修改。
标签: powershell