Ausdrücke dürfen nur als erstes element einer pipeline
Ich bin neu beim schreiben in der powershell aber das ist, was ich versuche zu erreichen.
- Ich will vergleichen die Daten von zwei excel-Dateien, um zu ermitteln, ob eine neuere ist als die anderen.
- Ich möchte eine Datei konvertieren von csv zu xls auf einem computer, der nicht über excel. Nur wenn die Aussage oben stimmt, die erste xls-Datei kopiert wurde, schon.
- Ich wollen, kopieren Sie die neu konvertierte xls-Datei an einen anderen Speicherort
- Wenn die Datei bereits offen ist, wird es nicht zu kopieren, so dass ich möchten, senden Sie eine E-Mail-Benachrichtigung über Erfolg oder Mißerfolg dieser operation.
Hier ist das Skript, dass ich Probleme mit. Der Fehler ist "Ausdrücke darf nur als erstes element einer pipeline." Ich weiß, es ist zu tun mit der E-Mail-Betrieb, aber ich bin an einem Verlust, wie schreibt man dieses manuell mit alle diese Variablen enthalten. Es gibt wahrscheinlich mehr Fehler, aber ich bin nicht zu sehen Sie jetzt. Vielen Dank für jede Hilfe, ich Schätze es!
$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)}
}
- Ich bin mir nicht sicher, was genau Sie versuchen zu erreichen, auf diese Zeile: $SendEmailSuccess = $MessageBody = "kopieren erfolgreich beendet!" | New-Object System.Net.E-Mail.SMTPClient mail.mail.com $SMTPMessage Aber ich kann mir vorstellen, dass es der Täter den Fehler.
- nicht Bearbeiten Sie den Inhalt. Es ist nicht Sinn, mit Ihrer Frage an alle dann. Dies wird nützlich sein, für zukünftige Besucher, auch wenn Sie es herausgefunden haben. Hängen Sie Ihre änderungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie diese Fehlermeldung, wenn Sie versuchen, führen Sie eine unabhängige code-block innerhalb einer pipeline-Kette.
Nur als ein anderes Beispiel, stellen Sie sich den code mit jQuery:
Jeder Punkt (
.
) Kette wird das array in die nächste Funktion. In der obigen Funktion werden diese Pausen mitconsole
denn es ist nicht dazu gedacht, irgendwelche Werte an die Pipeline gesendet. Wenn wir wollen, zu brechen, von unseren Verkettung zum ausführen von code (vielleicht auf Objekte in der Kette - das können wir miteach
wie diese:Die Lösung ist powershell ist identisch. Wenn Sie möchten, führen Sie ein Skript für jedes Objekt in der Kette einzeln, können
ForEach-Object
oder alias (%
).Stellen Sie sich vor Sie haben die folgende Funktion in der Powershell:
Die Letzte Zeile kann nicht ausgeführt werden, denn es ist ein Skript, aber wir lösen können, dass mit ForEach wie diese:
Dieser Fehler im Grunde geschieht, wenn Sie einen Ausdruck verwenden, der auf der Empfängerseite der pipeline, wenn es nicht die Objekte aus der pipeline.
Würden Sie die Fehlermeldung erhalten, wenn Sie so etwas tun:
oder auch dieses:
Ich weiß nicht, warum versuchen, Rohr überall. Ich würde empfehlen, Sie lernen die Grundlagen zur Powershell-Pipelines. Sie nähert sich falsch. Auch, ich denke, Sie können den link unten, um zu sehen, wie E-mail zu senden, sollten gerade nach vorne, ohne die Komplikationen, die Sie Hinzugefügt haben, die mit den Rohren : http://www.searchmarked.com/windows/how-to-send-an-email-using-a-windows-powershell-script.php
$a | write-host
eher alswrite-host $a
. Und ja, manchmal ist es überlastet ist. Schön zu schreiben, Einzeiler, aber schwer zu pflegen Skripts, die anderen haben zu Lesen und zu verwalten.