Laden...

MS PowerShell Cmdlet

Erstellt von egrath vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.175 Views
egrath Themenstarter:in
871 Beiträge seit 2005
vor 17 Jahren
MS PowerShell Cmdlet

Hallo,

ich bin gerade dabei mich etwas in die neue MS PowerShell (ehemals Monad) einzuarbeiten und wollte mir dazu ein neues Cmdlet erstellen - wie in der Dokumentation beschriebene:


using System;
using System.Collections;
using System.ComponentModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

namespace CmdletSnapin
{
    [RunInstaller( true )]
    public class RandomNumberSnapin : PSSnapIn
    {
        public RandomNumberSnapin() : base()
        {
        }

        public override string Name
        {
            get
            {
                return "RandomNumberSnapin";
            }
        }

        public override string Vendor
        {
            get
            {
                return "egrath";
            }
        }
        
        public override string Description
        {
            get
            {
                return "Returns a Random Number";
            }
        }
    }

    [Cmdlet( "get", "random" )]
    public class GetRandomCommand : Cmdlet
    {
        protected override void EndProcessing()
        {
            Random r = new Random();
            WriteObject( r.Next() );
        }
    }
}

Der Source wird anstandslos zu einer Library kompiliert. Nur leider hab ich anschliessend ein Problem mit dem einbinden des Cmdlets in die Shell.

Laut anleitung muss ich dazu dass "installutil" aus dem Framework bemühen und diesem als Parameter die erzeugte Dll mitgeben. Dies wird auch ohne Fehler durchgeführt, nur kann ich das Cmdlet anschliessend immer noch nicht aufrufen....

Weiss jemand eine Lösung, bzw. kennt jemand den Link zur PowerShell/MSH Dokumentation in der MSDN. Ich meine mich düster daran zu erinnern dass es diese Dokumentation dort gibt, nur leider find ich diese nicht mehr.... (oder ich bin zu dumm zu suchen...)

Danke und Grüsse,

Egon

egrath Themenstarter:in
871 Beiträge seit 2005
vor 17 Jahren

Hallo,

ich hab die Lösung gefunden, man muss das erzeugte Snapin anschliessend noch registrieren:

1.) Add-PSSnapin RandomNumberSnapin
2.) Export-Console $Env:APPDATA\MyConsole
3.) Zukünftige PowerShell Sessions mit

powershell -PSConsoleFile "%APPDATA%\MyConsole.psc1"

starten

Ab (1) kann auf das Cmdlet "Get-Random" zugegriffen werden.

Grüsse, Egon

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo egrath,

ich wäre dir nicht böse, wenn du zur gegebenen Zeit über die Erfahrungen, die du mit der powershell gemacht hast, hier im Forum berichten würdest.

herbivore

4.207 Beiträge seit 2003
vor 17 Jahren

Würde mich auch sehr interessieren!

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

S
8.746 Beiträge seit 2005
vor 17 Jahren

Ich habs mir mal zwei Stunden angeschaut. Die Powershell ist ein Super-Kracher. Endlich kein Text-Gefrickel mehr sondern schöne Objektorientierung. Traumhaft. Die volle .NET-Anbindung ist natürlich sensationell. Keine Frickel-Erweiterungen für Oberflächen oder DB-Anbindung sondern alles so wie man es eh schon kennt. Die Syntax ist natürlich ein wenig gewöhnungsbedürftig. Toll auch die relationalen Features (selects). C# 3.0 läßt grüßen.

Aus meiner Sicht das Non-Plus-Ultra an Shell.

4.207 Beiträge seit 2003
vor 17 Jahren

Bin mal gespannt, wie lang es dauert, bis die erste Shell unter Linux so was kann gg ...

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

egrath Themenstarter:in
871 Beiträge seit 2005
vor 17 Jahren

Hallo,

da ich mich heut den ganzen Tag mit dem Teil rumgespielt hab, hab ich eine (sehr) kurze Übersicht über die PowerShell geschrieben um einen groben Überblick über das ganze zu geben. Vielleicht ists ja für manche interessant.

Grüsse,

Egon

egrath Themenstarter:in
871 Beiträge seit 2005
vor 17 Jahren

Original von Golo Haas
Bin mal gespannt, wie lang es dauert, bis die erste Shell unter Linux so was kann gg ...

Dank Mono vermutlich genau so lange bis dieselbe Version 2.0 voll unterstützt gg

Grüsse, Egon

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo egrath,

vielen Dank für die ausführliche Beschreibung! Gemessen an der Leistungsfähigkeit ist die Beschreibung vielleicht kurz, aber für einen ersten Erfahrungsbericht ist das sehr ausführlich.

herbivore

M
456 Beiträge seit 2004
vor 17 Jahren

Zufälligerweise hab ich mich heute auch damit beschäftigt, wie man eigene Snapins bastelt und in die PowerShell integriert. Der installutil Aufruf und die zusätzlichen Snapin-Registrierung ist aber leider etwas fummelig. (Cmdlets muss man aber nicht unbedingt in C# schreiben, dass geht auch mit der Shell selbst.)

Insgesammt ist die PS aber ne geniale Sache. Objektorientierte Pipelines sind ein klarer Fortschritt gegenüber alten Zeichenkettenströmen. Will man spezielle Informationen aus der Pipeline eines anderen Programms lesen, so musste man früher erst mit awk, grep und Co. den Stream durchsuchen. Durch die Objektorientierung bekommt man auch gleichzeitig die "Semantik" des Datenstroms mitgeliefert.

Aber nicht nur die Pipeline ist Objektorientiert, sondern auch die Shell-Variablen werden auf die Typen des .NET Frameworks abgebildet. Wenn man beispielsweise folgendes eintippt:

 PS> $hallo = "Ich bin ein String."
 PS> $hallo | get-member | %{"{0,20} : {1,-20}" -f $_.name $_.membertype.tostring()}

bekommt man die internen Member der String-Klasse zurück. (Man beachte auch den Format-Syntax, der identsch zu Console.WriteLine() ist)

Mal sehen, wie das Ganze in Zukunft angenommen wird, denn die Shell ist nicht nur wesentlich mächtiger als die alte cmd.exe, sondern auch deutlich komplexer geworden. Eine gewisse Einarbeitungszeit ist also notwendig.
Fazit: Wieder ein schönes, neues und nützliches Spielzeug für Admins und Programmierer 🙂

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.