none
missing the terminator: ' RRS feed

  • Frage

  • Hallo Leute,

    ich habe das Problem, dass mein Script aus PowerShell 5.1 nicht mit PowerShell 2.0 funktioniert.

    Der folgende Aufruf funktioniert in PowerShell 5.1:

    $Name= "dokument_45"     
    $sendTo = "'<Vorname.Nachname@provider.com>'"
    $subject = '"Error bei $Name"'
    $body = '"Im Anhang $Name"'
    $automailer = ".\automailer.exe -sendTo=$sendTo -Attachments=$Path -Subject=$subject -Body=$body | Out-Null"
    Invoke-Expression -Command $automailer

    In PowerShell 2.0 gibt es folgende Fehlermeldung:

    Invoke-Expression : The string starting:
    At line:1 char:55
    + .\automailer.exe -sendTo='<Vorname.Nachname@provider.com> <<<< ' -Attachments=C:\Users\Public\Documents\Ordner\Logs\dokument_45\dokument_45_Error_Tuesday_12_09_2017_15h_51m_38s.txt -Subject="Error bei $Name" -Body="Im Anhang $Name" | Out-Null
    is missing the terminator: '.
    At C:\Users\ich\Desktop\dasScript.ps1:326 char:26
    +         Invoke-Expression <<<<  -Command $automailer
        + CategoryInfo          : ParserError: ( -Attachments=C...ame" | Out-Null:String) [Invoke-Expression], IncompleteParseException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString,Microsoft.PowerShell.Commands.InvokeExpressionCommand

    Kann mir jemand weiterhelfen?

    Danke im Vorraus.

    Dienstag, 12. September 2017 14:26

Antworten

  • Ich hab eine Lösung gefunden:
    [string]$arguments = "-sendTo=`"$sendTo`" -Subject=`"$subject`" -body=`"$body`" -Attachments=`"$Path`""
    [System.Diagnostics.Process]$automailer = New-Object System.Diagnostics.Process
    $automailer.StartInfo.UseShellExecute = $false
    $automailer.StartInfo.FileName = 'C:\Program Files (x86)\AutoMailer\automailer.exe'
    $automailer.StartInfo.Arguments = $arguments
    $automailer.Start()
    Danke für eure Unterstützung!
    Mittwoch, 13. September 2017 14:58

Alle Antworten

  • Moin,

    in einfachen Anführungszeichen findet keine Variablen-Expansion statt. Da musst Du

    "`"$var`""

    (Backtick) oder

    '"' + $var + '"'
    oder noch etwas Ausgefalleneres machen...


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Dienstag, 12. September 2017 14:32
  • ...und übrigens: Nur um eine einfache Mail zu versenden, nimmst Du in PowerShell Send-MailMessage, funktioniert auch in 2.0. 

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Dienstag, 12. September 2017 14:34
  • Hallo,

    kannst du das vieleicht an meinem Besispiel zeigen? Ich hab es noch nicht ganz raus.

    Und wir müssen diese exe zum Versenden von Mails benutzen.

    Dienstag, 12. September 2017 14:59
  • Hallo,

    kannst du das vieleicht an meinem Besispiel zeigen? Ich hab es noch nicht ganz raus.

    Es geht um $subject und $body. Schau:

    Was Du brauchst ist

    Das komische Zeichen ist Backtick, also [Shift] + <Taste zwischen ß und Backspace auf der deutschen Tastatur>


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Dienstag, 12. September 2017 15:06
  • Die Variablen werden jetzt aufgelöst aber der Error bleibt noch der Gleiche

    Invoke-Expression : The string starting:
    At line:1 char:314
    + .\automailer.exe -sendTo="<Vorname.Nachname@provider.com>" -Attachments="C:\Users\Public\Documents\Ordner\Logs\dokument_45\dokument_45_Error_Wednesday_13_09_2017_9h_18m_14s.txt" -Subject="Error bei dokument_45"
     -Body="Im Anhang dokument_45 <<<< " | Out-Null
    is missing the terminator: ".
    At C:\Users\ich\Desktop\dasScript.ps1:326 char:26
    +         Invoke-Expression <<<<  -Command "$automailer"
        + CategoryInfo          : ParserError: ( | Out-Null:String) [Invoke-Expression], IncompleteParseException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString,Microsoft.PowerShell.Commands.InvokeExpressionCommand

    Mittwoch, 13. September 2017 07:23
  • Poste mal das derzeitige Skript.

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 13. September 2017 07:26
  • cd "C:\Program Files (x86)\AutoMailer"
    
    $sendTo = "`"<Vorname.Nachname@provider.com>`""
    $date = Get-Date -Format "_dddd_dd_MM_yyyy_H'h'_mm'm'_ss's'"
    
    $Name = "dokument_45"
    $pathLogFiles = "C:\Users\Public\Documents\Ordner\Logs"
    $Path = Join-Path -Path $pathLogFiles -ChildPath $Name
    $Path = Join-Path -Path $Path -ChildPath $Name
    $Path = -join("$Path", "_Error" , "$date", ".txt")
    
    $subject = "`"Error bei $Name`""
    $body = "`"Im Anhang $Name`""
    
    $automailer = ".\automailer.exe -sendTo=$sendTo -Attachments=`"$Path`" -Subject=$subject -Body=$body | Out-Null"
    Invoke-Expression -Command $automailer

    Mittwoch, 13. September 2017 07:36
  • > $automailer = ".\automailer.exe -sendTo=$sendTo -Attachments=`"$Path`" -Subject=$subject -Body=$body | Out-Null"

    Gib doch hier einfach mal $automailer aus:
    write-host $automailer
    Damit Du genau siehst, was da eigentlich jetzt drinsteht... :-)

    Mittwoch, 13. September 2017 07:40
  • Da steht dann drin:

    .\automailer.exe -sendTo="<Vorname.Nachname@provider.com>" -Attachments="C:\Users\Public\Documents\Ordner\Logs\dokument_45\dokument_45_Error_Wednesday_13_09_2017_9h_45m_29s.txt" -Subject="Error bei dokument_45" -Body="Im Anhang dokument_45" | Out-Null

    Dieser Befehl funktioniert in PowerShell 5.1 aber nicht in 2.0.

    Mittwoch, 13. September 2017 07:54
  • Ich finde dia ganze Kommandozeile für deinen Automailer etwas seltsam und wage auch vorsichtig zu bezweifeln, das das in 5.1 wirklich genau funktioniert wie beabsichtigt.

    Poste mal die Kommandozeile für den Automailer, so wie du sie in der CMD eintippen müsstest das sie funktioniert.

    Abgesehen davon kann ich Evgenij nur zustimmen, in Powershell gibts dafür Send-Mailmessage.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Mittwoch, 13. September 2017 13:35
    Moderator
  • In der CMD:

    automailer.exe -sendTo="<Vorname.Nachname@provider.com>"

    Zur Einfachheit habe ich mal die anderen Parameter weggelassen, da diese nicht das Problem sind.

    Und in PowerShell 5.1:

    .\automailer.exe -sendTo="<Vorname.Nachname@provider.com>"



    Mittwoch, 13. September 2017 13:46
  • > automailer.exe -sendTo="<Vorname.Nachname@provider.com>"

    Wenn das unter 2.0 nicht geht, dann würd ich sagen, daß sich die PoSh da an den <> verschluckt... Und dann hast Du jetzt ganz schlechte Karten, wenn die automailer.exe das braucht. Könntest höchstens mal ' statt " verwenden, vielleicht hilft's. Wenn nicht, bin ich raus :)

    Mittwoch, 13. September 2017 13:54
  • Das ist es leider auch nicht.

    Mittwoch, 13. September 2017 13:57
  • Da ich das Problem schwer erklären kann:

    PowerShell 2.0

    PowerShell 5.1

    Ich entschuldige mich für die unterschiedlichen Größen.

    Mittwoch, 13. September 2017 14:05
  • … nur mal so 'ne Idee: Versuch doch mal, ob Automailer eventuell auch ohne "<"  und ">" zurecht kommt. Solche Zeichen gehören meines Wissens normalerweise nicht zur Emailadresse und werden vielleicht von Deinem Automailer auch nur ignoriert.  ;-)

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 13. September 2017 14:17
  • Mann kann sie tatsächlich weglassen.

    Gut zu Wissen!

    Löst aber trotzdem nicht das Problem.

    Mittwoch, 13. September 2017 14:23
  • Ich hab eine Lösung gefunden:
    [string]$arguments = "-sendTo=`"$sendTo`" -Subject=`"$subject`" -body=`"$body`" -Attachments=`"$Path`""
    [System.Diagnostics.Process]$automailer = New-Object System.Diagnostics.Process
    $automailer.StartInfo.UseShellExecute = $false
    $automailer.StartInfo.FileName = 'C:\Program Files (x86)\AutoMailer\automailer.exe'
    $automailer.StartInfo.Arguments = $arguments
    $automailer.Start()
    Danke für eure Unterstützung!
    Mittwoch, 13. September 2017 14:58