Les Expressions ne sont autorisés que le premier élément d'un pipeline

Je suis nouveau à l'écriture dans powershell, mais c'est ce que je suis en train d'accomplir.

  1. Je veux comparer les dates des deux fichiers excel pour déterminer si l'un est plus récent que l'autre.
  2. Je veux convertir un fichier csv en xls sur un ordinateur qui n'ont pas excel. Seulement si la déclaration ci-dessus est vrai, la première xls fichier a été copié déjà.
  3. Je veux copier le nouvellement converti xls fichier vers un autre emplacement
  4. Si le fichier est déjà ouvert, il n'arrivera pas à copier donc je veux envoyer une alerte par courriel sur le succès ou l'échec de cette opération.

Voici le script que je vais avoir des problèmes avec. L'erreur est "Expressions ne sont autorisés que le premier élément d'un pipeline." Je sais que c'est à voir avec l'e-mail de l'opération mais je suis à une perte quant à la façon d'écrire manuellement avec toutes les variables incluses. Il y a probablement plus d'erreurs mais je ne suis pas les voir maintenant. Merci pour toute aide, j'apprécie!

$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)}
}   
Je ne suis pas sûr exactement ce que vous essayez d'accomplir sur cette ligne: $SendEmailSuccess = $MessageBody = "La copie est terminée avec succès!" | New-Object System.Net.Mail.SMTPClient mail.mail.com $SMTPMessage Mais j'imagine que c'est le coupable de l'erreur.
ne pas modifier le contenu. Il n'y a pas de raison d'en avoir votre question à tous, alors. Cela sera utile pour les futurs visiteurs, même si vous avez pensé à elle. Ajoutez vos modifications.

OriginalL'auteur meep | 2011-08-22