Windows Batch Skript auf Windows PowerShell Skript umschreiben?

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


Manni1398 
Fragesteller
 11.04.2017, 13:31

Danke ich werd mal reinschauen :)

0
grtgrt  11.04.2017, 14:31
@Manni1398

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?

0
Manni1398 
Fragesteller
 11.04.2017, 14:48
@grtgrt

424  Zeilen (mit paar Leerzeilen wirds bestimmt unter 400 sein)... ich muss das in 2 Wochen fertig haben ...

0
grtgrt  11.04.2017, 19:23
@Manni1398

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? 

0
grtgrt  11.04.2017, 19:26
@Manni1398

Um welchen Typ von Datenbanken geht es denn eigentlich im Script?

0
grtgrt  11.04.2017, 19:34
@grtgrt

Was nämlich hier gesagt wird, nährt meinen Verdacht, dass es gar nicht sinnvoll sein könnte, den alten Batch Code einfach nur in PowerShell möglichst eins-zu-eins neu zu formulieren.

0
grtgrt  11.04.2017, 19:41
@grtgrt

PowerShell - so denke ich - soll es vor allem möglich machen, in C# implementierte Klassen per Scripting zu nutzen.

0

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.

Manni1398 
Fragesteller
 11.04.2017, 14:47

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 ^^

0

Du solltest schon beide Skriptsprachen beherrschen. Dann weißt Du auch genau, was zu tun ist.

Ohne weitere Infos kann Dir keiner was raten.

Manni1398 
Fragesteller
 11.04.2017, 13:03

^^ 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 ? :)

0
MarkusGenervt  11.04.2017, 13:10
@Manni1398

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.

0
Manni1398 
Fragesteller
 11.04.2017, 13:29
@MarkusGenervt

^^ 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

0
MarkusGenervt  11.04.2017, 13:53
@Manni1398

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?

1
Manni1398 
Fragesteller
 11.04.2017, 14:54
@MarkusGenervt

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.


0
Manni1398 
Fragesteller
 11.04.2017, 15:04
@MarkusGenervt

Ach und bevor ichs vergess. Danke das du dir die Zeit nimmst :)

0
MarkusGenervt  11.04.2017, 15:05
@Manni1398

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. (^,^)

0
MarkusGenervt  11.04.2017, 15:09
@Manni1398

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.

0
Manni1398 
Fragesteller
 11.04.2017, 16:31
@MarkusGenervt

Denkst du, dass ich das ohne Hilfe in 2-3 Wochen hin bekomme?

0
MarkusGenervt  11.04.2017, 16:43
@Manni1398

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!   (⌣́_⌣̀)\(˘⌣˘ )

1
Manni1398 
Fragesteller
 11.04.2017, 17:50
@MarkusGenervt

Also kann ich die Batch wirklich von oben nach unten eins zu eins fürs erste übernehmen? :) Vielen Dank ich werds versuchen :)

0
MarkusGenervt  11.04.2017, 18:00
@Manni1398

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.

0
Manni1398 
Fragesteller
 11.04.2017, 18:04
@MarkusGenervt

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

0
Manni1398 
Fragesteller
 11.04.2017, 18:12
@MarkusGenervt

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 ... ^^


0
MarkusGenervt  11.04.2017, 18:15
@Manni1398

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*)

0
MarkusGenervt  11.04.2017, 18:18
@Manni1398

Wie gesagt, ich kann kein Auge mehr offen halten. Ich schau mir das heute Nacht mal an. Bis morgen :)

0
Manni1398 
Fragesteller
 11.04.2017, 15:12

Ich muss das halt in 2 max 3 Wochen fertig haben ^^

0