none
Problem beim Pipelinen in der PowerShell RRS feed

  • Frage

  • Hallo Community,

    ich habe folgendes Problem mit der PowerShell.

    Ich möchte mit der PowerShell ein Skript ausführen, welches ich mir zuvor über eine URL holen möchte.

    Das Skript test.ps1 beinhaltet dabei folgenden Programmcode, welchr über die URL erreicht werden kann (Erreichbarkeit wurde schon getestet).

    If (Test-Path -path test.ps1)

    {

    Write-Host "test.ps1 exists xxx"

    }

    else

    {

    Wirte-Host "test.ps1 does not exist xxx"

    }

    Folgende Codezeilen gebe ich in die PowerShell ein:

    Set-ExecutionPolicy -ExecutionPolicy Unrestricted

    $url = URL Adresse

    (new-object System.Net.WebClient).DownloadString($url) | PowerShell -Command -

    Als Ergebnis schreibt mir die PowerShell folgende Zeile:

    Write-Host "test.ps1 exists xxx"Wirte-Host "test.ps1 does not exist xxx"PS C:\>

    Mein Problem ist also warum führt die PowerShell hier das Skript nicht aus, sondern schreibt den Inhalt aus dem IF und dem ELSE auf die Konsole.

    Vielen Dank jetzt schon einmal für Eure Hilfe.

    Mittwoch, 7. Mai 2014 08:09

Antworten

  • Hi,

    ich habe mir angewohnt Webinhalte per Invoke-Webrequest zu holen, ist mMn einfacher zu bedienen und genauso flexibel, aber das ist ein anderes Thema.

    Schreibe den Inhalt aus dem Web-Request in eine Variable und übergebe diese an Invoke-Expression. Solltest du aber nur machen wenn du dir sicher bist was in drin steht ;)

    $s = (new-object System.Net.WebClient).DownloadString($url)
    Invoke-expression $s

    Gruß

    KK

    Mittwoch, 7. Mai 2014 21:44
  • Ich habe noch nie versucht, an die PowerShell.exe etwas zu pipen und denke nicht, daß es funkioniert. Der Aufruf von PowerShell.exe erstellt einen neuen Prozeß, was auch gegen die Pipeline spricht.

    Da ist der Vorschlag mit Invoke-Expression vielversprechender.


    -Raimund

    • Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 8. Mai 2014 14:12
    • Als Antwort markiert Alex Pitulice Montag, 19. Mai 2014 14:47
    Mittwoch, 7. Mai 2014 21:50

Alle Antworten

  • Hi,

    ich habe mir angewohnt Webinhalte per Invoke-Webrequest zu holen, ist mMn einfacher zu bedienen und genauso flexibel, aber das ist ein anderes Thema.

    Schreibe den Inhalt aus dem Web-Request in eine Variable und übergebe diese an Invoke-Expression. Solltest du aber nur machen wenn du dir sicher bist was in drin steht ;)

    $s = (new-object System.Net.WebClient).DownloadString($url)
    Invoke-expression $s

    Gruß

    KK

    Mittwoch, 7. Mai 2014 21:44
  • Ich habe noch nie versucht, an die PowerShell.exe etwas zu pipen und denke nicht, daß es funkioniert. Der Aufruf von PowerShell.exe erstellt einen neuen Prozeß, was auch gegen die Pipeline spricht.

    Da ist der Vorschlag mit Invoke-Expression vielversprechender.


    -Raimund

    • Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 8. Mai 2014 14:12
    • Als Antwort markiert Alex Pitulice Montag, 19. Mai 2014 14:47
    Mittwoch, 7. Mai 2014 21:50
  • Mich würde ja nur mal interessieren warum er mir die Zeile

    Write-Host "test.ps1 exists xxx"Wirte-Host "test.ps1 does not exist xxx"PS C:\> ausgibt, weil er scheint ja das durch die PowerShell zu pipen, nur halt nicht richtig.

    Alternativ funktioniert es ja mit dem Code:

    $url = URL Adresse

    (new-object System.Net.WebClient).DownloadFile($url, ".\test.ps1")

    .\test.ps1

    • Bearbeitet WI_STUDENT Freitag, 9. Mai 2014 08:33
    Freitag, 9. Mai 2014 07:33