Windows Batch Skript auf Windows PowerShell Skript umschreiben?
Hallo Liebe Community:)
Ich studiere zur Zeit Dual Informatik und schreibe gerade eine Projektarbeit über Automatisches Datenbankerstellen und Datengenerieren. Mit dem Theorieteil bin ich soweit durch und wollte nun anfangen das Batch Skript auf PowerShell umzustellen.
Leider hab ich echt keine Ahnung wo und wie man da anfängt ... mein fachlicher Betreuer ist zur Zeit aus gesundheitlichen Gründen nicht zu erreichen. Kann mir da jemand von euch Tipps geben.
Danke im Vorraus
3 Antworten
Der Einstieg in PowerShell könnte dir gelingen über das Kurztutorial auf Seite http://programminghistorian.org/lessons/intro-to-powershell .
Wenn das nicht reicht, empfehle ich Bücher zu Powershell von O'Reilly : https://www.google.de/search?q=oreilly+powershell&oq=oreilly+powershell .
Fang dann am besten an mit http://shop.oreilly.com/product/9780596801519.do ,
oder direkt mit den Scripts daraus, deren Sourcecode hier verfügbar ist : http://examples.oreilly.com/9780596801519/PowerShellCookbookModule.zip
Zu lernen, wie man mit PowerShell umfangreichere Scripts schreibt, erscheint selbst Leuten, die schon jahrelang programmiert haben, als ungewöhnlich schwierig. Sei dir also bewusst, dass du viel Geduld wirst aufbringen müssen.
Nebenbei: Aus wie viel Zeilen Code besteht denn eigentlich das Batch Script, welches du nach PowerShell portieren sollst?
Welchen Gewinn verspricht man sich von der Umstellung des Scripts auf PowerShell?
Wäre nicht insbesondere der Teil, der Daten zu generieren hat, weit einfacher in C# zu implementieren?
Was mich vor allem verwirrt:
Wenn ich mir (auf Seite https://www.script-example.com/themen/PowerShell_Befehle_Ueberblick.php ) den Vorrat an PowerShell-Befehlen so ansehe und mir dann ( ausgehend von Seite https://en.wikibooks.org/wiki/Windows_Batch_Scripting#SCHTASKS) vor Augen führe, welche Funktionen im deinem alten Batch Script aufgerufen sein können, kann ich mir nur schwer vorstellen, dass es da eine eins-zu-eins-Entsprechung zu einer Teilmenge des Funktionsvorrats der PowerShell geben kann.
Problemlos eins-zu-eins im neuen Script nachbildbar scheint mir nicht recht viel mehr als die Kontrollstruktur. Hast du darüber schon nachgedacht?
Um welchen Typ von Datenbanken geht es denn eigentlich im Script?
Bitte lies auf jeden Fall auch die Seite http://windowsitpro.com/windows/migrating-powershell-dont-scrap-your-existing-code-just-yet .
Weißt Du denn was das Batch-Skript tut? Die DOS-Kommandos sind eher dürftig, so viel kann das nicht sein, wogegen die Powershell sehr mächtig ist.
Ja ich weiss was das Batch-Skript kann. Ich weiss nur nicht wie ich das in die PowerShell packen soll. Ich bin mit der größe einfach überfordert :(
Ich kann hier aber keine Skript aus der Frima reinstellen ... versteht sicher jeder ^^
Du solltest schon beide Skriptsprachen beherrschen. Dann weißt Du auch genau, was zu tun ist.
Ohne weitere Infos kann Dir keiner was raten.
^^ Ja beherrschen ist gut ... ich kann die Theorie zu beiden Sprachen. Aber die Praxis eben nicht :( Jetzt ist das aber der Kern der Arbeit, welcher mir vom Unternehmen vorgegeben wird.
Welche Informationen brauchst du den ? :)
LOL … x-D
Sorry, aber wenn Du die Praxis nicht beherrschst, dann beherrschst Du gar nichts.
Als Info wäre schon mal das Batch-Skript selbst eine große Hilfe. Wenigstens aber könntest Du mal Dein Problem en detail ausformulieren.
Da hat kein Helfer bis jetzt auch nur irgend einen Ansatz, worum es geht. Ein Skript ist doch keine Anleitung zum Kaffee-Kochen. Damit kannst Du so ziemlich alles machen – bis auf einige Einschränkungen – was es gibt. Und insbesondere der Übersetzungsweg Batch -> Powershell ist ein Kinderspiel. Anders herum käme Batch ruckzuck an seine Grenzen.
^^ ja ok ich verstehe dein Problem. Er meinte auch zu mir es ist ein Kinderspiel , aber so als Anfänger hat mich die Größe des Skripts umbehauen. Ich mein so hier und da ein kleines Batch-Skript hab ich schon geschrieben. ( bin halt noch ein Ersti :/ )
Worum geht es:
Wir haben in der Firma ein Batch Skript welches eine Datenbank erstellt und je nach Nutzer wunsch Daten(Testdaten, Demodaten, usw) generiert, um unser LIMS zu testen. Dieses Skript soll nun auf PowerShell umgestellt werden.
Kaffee kochen kann ich ^^ Gott sei Dank sonst wäre ich jeden Morgen völlig hinüber.
mal ein kleines Bsp aus dem Batch Skript
set actionMode=%1
usw
Ich weiss bzw denke, dass damit Parameter initialisiert werden.
Bei mir steht da aber gewaltig einer auf dem Schlauch, wie ich das in der PowerShell schreib :( Wie gesagt ich sollte da ja eigtl Hilfe bekommen...
Aber wenn ich jetzt warte vergeht sinnlos Zeit die ich für meine Projektarbeit brauche.
Ich hoffe du verstehst mich ein bisschen ^^ Ich weiss in deinen Augen sehe ich aus wie ein Kleinkind was Autofahren will, aber naja mir reicht auch erstmal das bobby car
Ja Junge, das sieht aber ganz übel bei Dir aus!
Also erst mal ganz einfach zu Batch:
help batch
an der Befehlszeile gibt Dir einen ersten Überblick.
{Befehl} /?
gibt Dir Syntax-Hilfe zu den einzelnen Befehlen.
Dein SET-Befehl speichert z.B. den ersten Parameter der Befehlszeile. In Powershell sähe das so aus:
actionMode=$1
Zu der Powershell-Syntax solltest Du Dir unbedingt ein Online Tutorial durcharbeiten.
Außerdem empfehle ich Dir auch, Dich mit Bash und VBScript zu befassen, um die spezielle POSIX-Skript-Syntax zu verstehen und auch die System-Objekte (WMI) näher kennen zu lernen.
Leider hat Microsoft einen echten Krampf mit Powershell abgeliefert und man steigt da anfangs nur sehr schwer durch, wenn man nicht das andere Hintergrundwissen hat.
Hast Du jemals irgend etwas in Richtung "Programmieren" gemacht?
@all: bitte jetzt nicht über "Programmieren" unken (^,^)
@Manni1398: Ein Insider-Witz, denn Skripting ist kein Programmieren.
Dennoch geht es ohne Struktur-Kenntnisse mindestens in Skripting einfach nicht und Du stocherst nur im Trüben. Ich kann Dir das hier leider nicht alles erklären, denn dafür reicht der Platz hier nicht aus. Aber online gibt es eine Menge Tutorials, die sehr hilfreich sind.
Hast Du wenigstens schon mal eine "Hallo Welt"-Skript auf die Beine gebracht?
Ich sags mal so ich hatte jetzt im ersten Semester Prozedurale Programmierung und in der Schule hatte ich Java Editor ... :(
Stimmt schon ist Skripting, aber PowerShell kommt ja einer Programmiersprache relativ nah.
Ja ich versuchs ... wie gesagt das war alles nicht so vorgesehen ...
Ja hab ich. Ein "Hello World" schaff sogar ich... so blöd bin ich nun auch nicht.
Musste aber vorher erstmal die PowerShell über Adminstrator starten und
Set-ExecutionPolicy remotesigned
eingeben^^ Danach gings ... ja so blöd bin ich ja auch nicht :(
Wie gesagt mich erschlägt das alles bisschen 424 Zeilen Batch-Skript ... das hätte ich nicht erwartet.
Ach und bevor ichs vergess. Danke das du dir die Zeit nimmst :)
424 Zeilen Batch-Skript
Ja, ich hatte mich schon beim Stichwort "Datenbank" gefragt, "Ja, wer macht denn so was?" Das klang schon nach richtig viel Code. ;)
Wie auch immer. Ich wollte Dir nicht auf die Füße latschen. Die Relation zwischen Aufgabe und Kenntnisstand erschien nur überraschend verschoben. (^,^)
Da nich' für! :)
Ich liebe Batch, weil man mit so einem Winz-Tool doch immer noch so viel Aufgaben erledigen kann und das nach über 30 Jahren. Das geht (unter Windows) oft einfacher, als mit anderen Skriptsprachen.
Denkst du, dass ich das ohne Hilfe in 2-3 Wochen hin bekomme?
Nun, ich hatte Jahre um die kleinen Tricks zu perfektionieren. Aber ich denke, dass Deine Aufgabe nicht so schwer sein dürfte.
Wichtig ist im ersten Schritt das Batch-Skript zu verstehen. Die Transkription in Powershell kann dann sicherlich in vielen Variationen erfolgen.
Wenn Du erst einmal eine 1-zu-1-Übersetzung machst, sollte es am einfachste und schnellsten gehen. Das würde ich z.B. an einem halben Tag schaffen.
Das Kniffelige ist dann die Optimierung des Powershell-Codes unter Verwendung aller verfügbaren Objekte, denn die gibt es unter Batch gar nicht und das macht Batch ja gerade so lang.
Ich schätze mal ganz grob – und ohne den Code zu kennen – sollte der Powsershell-Code nachher längstens bei 100 Zeilen liegen, wohl aber deutlich weniger. Wenn du das so nicht hin bekommst, dann lass den Kopf nicht hängen. Aller Anfang ist schwer und ich habe es bisher noch nicht Meister regnen gesehen ;)
Batch ist nicht so viel und Powershell geht eigentlich.
Du schaffst das schon! (⌣́_⌣̀)\(˘⌣˘ )
Also kann ich die Batch wirklich von oben nach unten eins zu eins fürs erste übernehmen? :) Vielen Dank ich werds versuchen :)
Natürlich musst Du die Powershell-Syntax anwenden, sonst produzierst Du Fehler am laufenden Band. Außerdem ist das auch nur der erste Schritt. Dann kommt die Code-Optimierung.
Wenn Du mit letzterem nicht so schnell voran kommen solltest, hast du trotzdem dann immer noch ein funktionierendes Powsershell-Skript – voraus gesetzt, dass keine Syntax-Fehler vorkommen.
OK Ich werd mich heute Abend nochmal ransetzen um den Skript zu verstehn und dann morgen zusehen vorran zukommen :) Ne Internet Seite wo man die Syntax der PowerShell für die jeweilige Batch-Syntax sieht gibt es nicht oder ? xD
Nur mal noch so als Beispiel
if "%irgendwas%" == "irgendwas" set irgendwas=irgendwas (Batch)
if(irgendwas==irgendwas){irgendwas=irgendwas} (PowerShell)
Müsste doch so oder so ähnlich zumindest aussehen ;)
Somit könnte ich über elseif die nächsten 5 if in der Batch doch in PowerShell realisiern ... (Ich hoffe das ist kein totaler Schwachsinn)
Ich hab dir heute echt jede Menge Zeit und Nerven gestohlen ... ^^
Sorry, da musst Du selbst mal suchen. Dafür hatte ich bisher noch keine Verwendung ;)
Wenn Du möchtest, dann schick mir mal eine PN (als Freundschaftsanfrage) mir dem Code. Ich bin jetzt echt neugierig, was da so alles drin steht. Vermutlich erwarte ich mehr, als dann am Ende drin ist.
Aber heute ist für mich Schluss. Ich muss poofen. (*o*)
Wie gesagt, ich kann kein Auge mehr offen halten. Ich schau mir das heute Nacht mal an. Bis morgen :)
Danke ich werd mal reinschauen :)