Jestem nowy w pisaniu w grze Power Shell, ale to właśnie próbuję osiągnąć.Wyrażenia są dozwolone jako pierwszy element potoku
- Chcę porównać daty dwóch plików programu Excel w celu określenia, czy ktoś jest nowszy niż inne.
- Chcę przekonwertować plik z CSV na Xls na komputerze, który nie ma programu Excel. Tylko jeśli powyższe stwierdzenie jest prawdziwe, początkowy plik xls został już skopiowany.
- Chcę skopiować nowo przekonwertowany plik xls do innej lokalizacji
- Jeśli plik jest już otwarty, nie uda się go skopiować, dlatego chcę wysłać wiadomość e-mail z powiadomieniem o powodzeniu lub niepowodzeniu tej operacji.
Oto skrypt, z którym mam problemy. Błąd: "Wyrażenia są dozwolone tylko jako pierwszy element potoku." Wiem, że ma to związek z operacją e-mail, ale nie mam pojęcia, jak to napisać ręcznie z uwzględnieniem wszystkich tych zmiennych. Prawdopodobnie jest więcej błędów, ale nie widzę ich teraz. Dzięki za pomoc, doceniam to!
$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 protected]"
$ToAddress = "[email protected]"
$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)}
}
Nie jestem pewien, co dokładnie próbujesz osiągnąć w tym wierszu: $ SendEmailSuccess = $ MessageBody = "Kopia zakończona pomyślnie!" | New-Object System.Net.Mail.SMTPClient mail.mail.com $ SMTPMessage Ale wyobrażam sobie, że jest winowajcą błędu. – EBGreen
@meep - nie edytuj zawartości. Nie ma sensu mieć wtedy twojego pytania. Przyda się to przyszłym odwiedzającym, nawet jeśli już to wymyśliłeś. Dołącz swoje zmiany. – manojlds