none
.ps1 Dateien in C# aufsführen RRS feed

  • Frage

  • Guten Tag zusammen,
    ich benötige für ein Schulprojekt eine Anwendung die eine Powershell ausführt. Ich habe es mit einer Konsolen Anwendung in C#probiert, wenn er die Powershell ausüben will, sagt das System, dass es keine Berechtigung hätte die Powershell auszuführen. Die Execution Policy steht aber auf unrestricted.

    Hier mein C# code:

    Process.Start("PowerShell.exe", @"c:\Users\alibaba\Desktop\Verschieben2.ps1");

     

    using(PowerShell PowerShellInstance = PowerShell.Create())

                {

                    PowerShellInstance.AddScript("Invoke-Item c:\\Users\\alibaba\\Desktop\\Verschieben2.ps1");

     

                    PowerShellInstance.Invoke();

                    }


    Hier ist die Powershell, die ausgeführt werden soll:

    move-item -path c:\user\.... -destination c:\user\...

    im Voraus Danke für eure Hilfe

    Donnerstag, 9. Juni 2016 10:40

Antworten

Alle Antworten

  • Hallo Pierre!

    PowerShell.exe ist ein "DOS" Kommando.

    Den meisten dieser Kommandos kann man Startbedingungen als Parameter mitgeben.

    siehe hier: https://technet.microsoft.com/de-de/library/hh847736.aspx?f=255&MSPPError=-2147217396

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                System.Diagnostics.Process.Start("PowerShell.exe", @"-executionpolicy unrestricted C:\Temp\Test.ps1");
    
    
            }
        }
    }
    Oder folge dieser Anleitung:
    https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+


    Donnerstag, 9. Juni 2016 11:57
  • Die Frage ist erst einmal, wie genaulautet die Fehlermeldung und wo taucht die auf, in der einer Powershell-Console?
    Und warum hast du zweimal den gleichen Code in unterschiedlichen Varianten im Code?

    Grundsätzlich sind hier z.b. mehrere Varianten, wie man Powershell in C# hosten kann, erklärt: LINK

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    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.


    Donnerstag, 9. Juni 2016 12:06
    Moderator
  • Vielen Dank für die schnellen Antworten:

    Meine Anwendung führt als erstes einen Web Request aus und speichert ihn in eine Datei. Im zweiten Schritt soll die oben genannte Powershell ausgeführt werden. Der Web Request funktioniert tadellos und speichert die Datei. Danach öffnet sich das Powershell-Fenster und es erscheint nach einer Denksekunde der Fehler: „Ausführung von Scripts auf diesem System deaktiviert“.

    Ich habe verschiedene Varianten ausprobiert um zu schauen, ob es vielleicht einen anderen Weg gibt, aber ich lande im bei derselben Fehlermeldung.

    @Peter Kriegel: Dein Lösungsvorschlag hat leider auch nicht funktioniert.

    Donnerstag, 9. Juni 2016 12:37
  • Hallo,

    das klingt nach der ExecutionPolicy. Hast du jemals PowerShell-Skripte auf diesem Rechner ausgeführt? Wenn nicht, wird es das wohl sein.

    Öffne eine PowerShell-Console mit PowerShell.exe oder in der ISE und führe folgendes aus:

    Set-ExecutionPolicy Unrestricted

    Hast du keine Rechte zum Ändern der globalen Einstellungen, kannst du es nur für deinen Account ändern:

    Set-ExecutionPolicy Unrestricted -Scope CurrentUser

    Für weitere Infos hierzu führe aus:

    get-help about_Execution_Policies

    Viele Grüße

    Christoph


    • Bearbeitet hpotsirhc Donnerstag, 9. Juni 2016 12:57
    Donnerstag, 9. Juni 2016 12:56
  • Hey,

    die lösung ist nicht schön aber in einigen scriptfällen habe ich das gelöst, indem vor dem eigentlichen powershell script folgendes ausgeführt wird:

    powershell.exe -Command "Set-executionpolicy Unrestricted -Scope CurrentUser"

    (der scope kann ja jeweils angepasst werden)
    Donnerstag, 9. Juni 2016 13:08
  • Ja ich habe schon Powershell-Skripte ausgeführt und die executionPolicy ist auf unrestricted. Wenn ich die .ps1 mit rechtsklick "ausführen als Powershell" ausführe, funktioniert die Powershell auch. Ich bekomme den Fehler nur wenn ich versuche die Powershell über meine Anwendung auszuführen.

    Ich habe auch schon versucht eine leere .ps1 Datei auszuführen, immer mit dem selben Ergebnis: "Ausführung von Scripts auf diesem System deaktiviert"

    Donnerstag, 9. Juni 2016 13:09
  • Es funktioniert :-)

    Danke an alle. Die Lösung von Peter Kriegel war schon richtig. Ich hatte nur einen zweiten kleinen Fehler(in der Powershell selbst), nachdem ich diesen behoben hatte hat es funktioniert.

    Donnerstag, 9. Juni 2016 13:59