Für einige Überwachungsapplikationen und für Tasks, die geplant werden müssen, um einige Dienste abzufragen, verwenden wir traditionell eine Konsolenanwendung, die wiederum einige Methoden in unserer Business-Schicht aufruft oder Dateispeicherorte / ftp-Speicherorte abfragt.
Für eine andere Aufgabe, die ich gerade ausgeführt habe, habe ich angefangen, mit Powershell zu spielen und war ziemlich beeindruckt, was mich dazu brachte, über die Vorteile eines Powershell-Skripts und einer Konsolenanwendung nachzudenken.
Es scheint die Tatsache zu sein, dass das Powershell-Skript im laufenden Betrieb ohne Neukompilierung bearbeitet werden kann, was es zu einem Plus für mögliche Änderungen macht, aber es muss Nachteile geben, die ich nicht sehe.
Wann würden Sie also empfehlen, eine Konsolenanwendung für ein Powershell-Skript auszutauschen?
Ich denke, der beste Weg, darüber nachzudenken, ist wann würden Sie eine Konsolenanwendung wählen?
Wenn Sie sich nicht um bahnbrechende Laufzeitgeschwindigkeit, die Verteilung an Dritte (PowerShell ist noch nicht ganz Standard) oder den Schutz des Quellcodes sorgen, dann ist PowerShell meiner Meinung nach ein starker Konkurrent.
Übrigens kann PowerShell COM-Objekte out-of-the-box manipulieren, so dass es im Hinblick auf die Automatisierung von Aufgaben recht gut als Leimcode zwischen .NET und COM-basierter Infrastruktur funktioniert.
Der größte Vorteil für mich ist der Verlust des Kompilierprozesses und das Ausrollen von Binärdateien. Ich gebe dir ein Beispiel. Ich hatte eine Anwendung, die einige Assemblies aus dem privaten Ordner von Visual Studio, die installierten Binärdateien und Unit-Tests während unseres Compiel-Prozesses verwendet. Als VS 2008 herauskam, musste ich die Ressourcen ändern, neu kompilieren und dann Binärdateien auf allen Build-Servern bereitstellen. Ich entschied, dass das dumm war, und wechselte zu PowerShell, so dass mein Skript herausfindet, welche Version von vsts installiert ist und in die höchste versionierte DLL geladen wird. Jetzt können Sie dies in einer App mit Reflektion und späte Bindung tun, aber es ist viel einfacher in PowerSHell, dass jeder Release-Techniker das Skript schnell in einem Texteditor ändern kann, wenn wir Binärdateien hinzufügen oder Binärdateien entfernen, die wir instrumentieren müssen . Für kleinere Inhouse-Apps bin ich immer PowerShell jetzt ...
Nun, es sieht so aus, als ob Ihr Fall nahezu perfekt zu den Dingen passt, für die Powershell entwickelt wurde. Der einzige mögliche Nachteil, den ich mir vorstellen kann, ist, dass Powershell ein wenig langsam sein kann, da es interpretiert und nicht kompiliert wird und auch nicht für Geschwindigkeit, sondern eher für Benutzerfreundlichkeit optimiert wurde.
Sie sollten auch die Größe der "App" berücksichtigen. Wenn eine einzelne, kleine Datei die Aufgabe bewältigen kann, ist PowerShell eine großartige Lösung. Wenn Sie darüber hinaus sind, müssen Sie Fragen zur Wartbarkeit und Verständlichkeit des Skripts im Vergleich zum typischen Anwendungscode stellen. (Und die Quellcodeverwaltung sollte nicht in die Gleichung eingehen, da beide dort gespeichert werden sollten!)
Unterschätzen Sie nicht den Wert des im Wesentlichen freien Parameter-Parsings, der mit erweiterten Funktionen in V2 noch besser wird. Denken Sie an all die kleinen Konsolen-Apps, die Sie schreiben, und daran, wie viel von diesem Code Parameter-Parsing ist, anstatt etwas Interessantes zu tun. Denken Sie auch darüber nach, wie gut Sie mit dem Parsen von Parametern umgehen? Behandeln Sie positionale vs benannte Parameter? Wie wäre es mit Parametervalidierung? Standard-Parameterwerte? Wie wäre es mit Antwortdateien? Während Posh keine Antwortdateien im Wortsinn unterstützt, gibt es in V2 einen Splatting-Operator, der es Ihnen ermöglicht, Parameter entweder in einem Array oder einer Hashtabelle zu packen - eine sehr ähnliche Fähigkeit.
OTOH Irgendwann, wenn mein Skript anfängt, riesig zu werden und ich .NET-Code mehr als Cmdlets anrufe, fange ich an, darüber nachzudenken, ein Cmdlet zu schreiben, um die Arbeit zu erledigen. Der VS-Debugger ist immer noch besser als selbst die V2-Debug-Funktionen.
Tags und Links .net powershell