Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MS PowerShell Cmdlet
egrath
myCSharp.de - Member

Avatar #avatar-2119.jpg


Dabei seit:
Beiträge: 937
Herkunft: Österreich / Steyr

Themenstarter:

MS PowerShell Cmdlet

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
egrath
myCSharp.de - Member

Avatar #avatar-2119.jpg


Dabei seit:
Beiträge: 937
Herkunft: Österreich / Steyr

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
egrath
myCSharp.de - Member

Avatar #avatar-2119.jpg


Dabei seit:
Beiträge: 937
Herkunft: Österreich / Steyr

Themenstarter:

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
egrath
myCSharp.de - Member

Avatar #avatar-2119.jpg


Dabei seit:
Beiträge: 937
Herkunft: Österreich / Steyr

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers