stefan2012
Goto Top

Powershell Skripte über URL für andere Benutzer zugänglich machen

Hallo zusammen,
ich hofe ich habe diese Frage hier richtig plaziert.

Ich hab einige Powershell Skripte gebaut. Nun möchte ich diese anderen aus meinem Team zur Verfügung stellen. Ich dachte mir, es wäre mögllich ein Skript über eine einen Webserver für die Auführung bereit zu stellen.

Ich stelle mir das so vor. Jemand ruft eine Webseite auf (http:\\skriptserver\skript1) und dann fängt das Skript an zu laufen.

Das ist zum Beispiel ein Skript was auf allen DC und Linux DNS Servern den DNS Cache sofort löscht.

Das Ziel soll sein, das neimand groß Powershell lernen muss, sondern nur, wenn er die entsprechenden Rechte hat einen kurzen Link aufruft und dann alles von alleine losläuft.

Content-Key: 221253

Url: https://administrator.de/contentid/221253

Printed on: April 18, 2024 at 16:04 o'clock

Mitglied: 106543
106543 Nov 06, 2013 at 07:37:28 (UTC)
Goto Top
Wenn das so ist, richte doch eine Freigabe ein, in der die Skripte liegen und gib den Usern eine Verknüpfung zu diesen Scripten.

Grüße
Exze
Member: colinardo
colinardo Nov 06, 2013 updated at 10:29:19 (UTC)
Goto Top
Hallo stefan2012,
das könnte man z.B. mit einem PHP-Script so realisieren:
if (isset($_GET['action']) && $_GET['action'] !== ""){  
	$action = $_GET['action'];  
	switch ($action){
		case 'deleteCache':  
			exec('powershell -NonInteractive -File "C:\Scripte\deleteCache.ps1"');  
			echo "Script '$action' wurde ausgeführt!";  
			break;
		case 'changeSetting1':  
			exec('powershell -NonInteractive -File "C:\Scripte\changeSetting1.ps1"');  
			echo "Script '$action' wurde ausgeführt!";  
			break;
	}
}
Dann ruft man z.B. eine Seite folgendermaßen auf um ein bestimmtes Script auszuführen:
http://scriptserver/scripts.php?action=deleteCache
man ändert dann einfach den 'action' Parameter für unterschiedliche Scripte. Und setzt im Script im Gegenzug für diese Action einen entsprechenden Powershell-Aufruf.
Aber bitte entsprechende Sicherheitsvorkehrungen für diese Seiten vornehmen, so dass sie nicht jeder aufrufen kann bzw. nur die autorisierten Personen!

Grüße Uwe
Member: stefan2012
stefan2012 Nov 06, 2013 at 09:20:29 (UTC)
Goto Top
Hallo colinardo,

die Idee hört sich am besten an. Bin kein PHP Crack, dazu brauch ich auf der Windows Maschine eine Möglichkeit PHP zu nutzen. Also Apache for Windows installieren oder kann ich das über den IIS machen?
Member: colinardo
colinardo Nov 06, 2013 updated at 12:26:34 (UTC)
Goto Top
Das selbe Script lässt sich auch in ASP.Net-Seite umsetzen dann brauchst du keinen Apache und PHP

back-to-topBeispiel
Imports System.Diagnostics
Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        If Request.QueryString("action") <> "" Then  
            Dim action As String = Request.QueryString("action")  
            Select Case action
                Case "deleteCache"  
                    Dim newproc As Process
                    newproc = Process.Start("powershell.exe", "-NonInteractive -File ""C:\Scripte\deleteCache.ps1""")  
                    newproc.WaitForExit()
                    Response.Write("Script '" & action & "' wurde ausgeführt")  
            End Select
        End If
    End Sub
End Class

Grüße Uwe
Member: stefan2012
stefan2012 Nov 20, 2013 at 09:43:02 (UTC)
Goto Top
wenn auch etwas spät, aber erstmal besten Dank. Durch Grippe bin ich jetzt noch nicht zum testen gekommen.
Aber das werde ich jetzt nachhohlen.

Besten Dank...ich melde mich... und schliesse dann auch den Post.
Member: stefan2012
stefan2012 Jan 07, 2014 at 13:02:00 (UTC)
Goto Top
Hallo Uwe,

jetzt muss ich mich outen. Ich bin auch kein ASP. Experte.
Hab nen Windows 2008R2 Server mit einem IIS laufen. Hab ASP.NET 4.0 freigeschaltet und läuft.
Hab auch erfolgreich eine Seite mit anzeiget. Leider kann ich mit deinem Code Fetzen nicht so viel anfangen.

Wie baue ich das jetzt genau ein?

DANKE im voraus .-)
Member: colinardo
Solution colinardo Jan 07, 2014, updated at Jan 08, 2014 at 12:12:37 (UTC)
Goto Top
Zitat von @stefan2012:
Hab auch erfolgreich eine Seite mit anzeiget. Leider kann ich mit deinem Code Fetzen nicht so viel anfangen.
Das ist ein Fetzen aus Visual Studio
Wie baue ich das jetzt genau ein?
Also wenn deine Seite Default.aspx heißt erstellst du eine weitere Datei im gleichen Verzeichnis mit dem Namen Default.aspx.vb (Dies ist dann das CodeBehind-File mit der Programm-Logik) und kopierst den obigen Code dort hinein.
Dann musst du noch folgende Zeile im Kopf deiner Default.aspx einfügen
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>  
Aufrufen kannst du das ganze dann wieder so:
http://scriptserver/Default.aspx?action=deleteCache
Grüße Uwe
Member: stefan2012
stefan2012 Jan 08, 2014 at 08:44:10 (UTC)
Goto Top
danke, ich glaube ich stelle mich grade etwas ungeschickt an *lol

Noch bin ich dem ganzen nicht auf der Spur und es läuft noch nicht. Es kommt ein HTTP 404 Requestet URL: Default.aspx

- Also, ich erstelle zum testen eine leere Default.aspx Seite die ausser einer Überschrift nichts anzeiget!
- dann habe ich dein obrigen ASP.NET Code in die Default.aspx.vb gelegt und gespeichert
- dann in die erste Zeile der Default.aspx Seite "<%@ Page Language="..." gepackt
- in dem Code einen simplen PS Shell eingefügt. (get-process)

dann über den Browser über "http://scriptserver/Default.aspx?action=deleteCache" ausgeführt. Also der Action Flag hab ich nicht geändert, dewegen ist der Name noch gleich face-smile

Un dann kommt .... Server Error in `/`Application
Es kommt ein HTTP 404 Requestet URL: Default.aspx

Die PowerShell Datei liegt im TEMP Ordner und ist im auch angepasst mit Pfad.

Danke im voraus!
Member: colinardo
colinardo Jan 08, 2014 updated at 09:39:43 (UTC)
Goto Top
Hier das ganze mal in einem Video zusammengefasst, bevor ich mich hier fusselich rede face-wink
Member: stefan2012
stefan2012 Jan 08, 2014 at 12:12:14 (UTC)
Goto Top
hey, super, das mit dem Video ist ganz klar TOP! face-smile
Aber ich hab doch alles richtig gemacht.

Der Fehler war einfach, das ich einen Unterordner angelegt habe mit dem bereits richtigen skript. Aber in der URL hab ich den vergessen und den Standardpfad verwendet.

Hier lag eine kaputt getestete default.aspx ...


D A N K E!