Entspricht in C#das Schlüsselwort "using" in der powershell?
Wenn ich ein anderes Objekt in der .net-Framework in C# kann ich sparen Sie eine Menge Tipparbeit, indem Sie mit der using-Direktive.
using FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It;
...
var blurb = new Thingamabob();
...
Also gibt es eine Möglichkeit in der Powershell zu tun etwas ähnliches? Ich bin den Zugriff auf eine Menge .net-Objekte und-bin nicht glücklich mit zu geben
$blurb = new-object FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It.Thingamabob;
ganze Zeit.
Ich weiß, das ist eine alte Frage, aber PowerShell-5 eingeführt, die
using
- Anweisung. Sie können verwenden diese für .net-namespaces, oder Module (die ist eine der wenigen Möglichkeiten zum importieren von benutzerdefinierten Klassen). Die syntax ist using namespace Name.Space.Here
oder using module C:\Path\to\manifest
. Die einzige Voraussetzung ist, dass es vor allen anderen Anweisungen im Skript (auch der param-block)InformationsquelleAutor froh42 | 2009-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
PowerShell 5.0 (enthalten in WMF5 oder Windows 10 und up), fügt die
using namespace
Konstrukt der Sprache. Sie können verwenden Sie es in Ihrem Skript etwa so:(Die
#Require
Anweisung in der ersten Zeile ist nicht nötigusing namespace
, aber es wird verhindert, dass das Skript ausgeführt wird, in PS 4.0 und unten, wousing namespace
ist ein syntax Fehler.)InformationsquelleAutor Brant Bobby
Es gibt wirklich nichts auf der namespace-Ebene so. Ich habe oft weisen Sie Häufig verwendete Typen, Variablen und anschließend instanziieren Sie:
Wahrscheinlich nicht Wert, wenn der Typ nicht mehrfach verwendet werden, aber ich glaube, es ist das beste, was Sie tun können.
$ns = [System.Runtime.InteropServices.Marshal]
dann können Sie$ns::PtrToStringAuto($ns::SecureStringToBSTR($ss))
.Hinweis für die Suche am besten bewerteten Antwort: PowerShell 5.0 behebt das.
InformationsquelleAutor dahlbyk
Schauen Sie sich dieses blog-post von vor ein paar Jahren: http://blogs.msdn.com/richardb/archive/2007/02/21/add-types-ps1-poor-man-s-using-for-powershell.aspx
Hier ist
add-types.ps1
, die einen Auszug aus diesem Artikel:Und, um es zu nutzen:
Im Grunde das, was ich Tue, ist kriechen die Versammlung für nicht-triviale Arten, dann schreiben Sie ein "Konstruktor" , nutzt Add-Element hinzufügen (strukturiert), um die Objekte, die mir wichtig sind.
Siehe auch das followup post: http://richardberg.net/blog/?p=38
Wenn Sie nicht über ein Objekt herum, um es zu übergeben an die Funktion, können Sie eine erstellen mit
New-Object PSObject
.InformationsquelleAutor Richard Berg
dies ist nur ein Scherz, Scherz...
Das wäre das äquivalent zur C# using-Anweisung, nicht die using-Direktive.
Ich mag die Art, wie diese aussieht. Wenn Sie waren, um Sie zu Begehen, erscheint dies wie eine ziemlich elegante Lösung für mich. PowerShell ist Flexibilität in der Fertigung eine neue syntax macht mich sehr glücklich.
Wenn Sie feststellen, dass amüsant, versuchen, eine funktionale Sprache, die-einige von Ihnen implementieren
try..catch
als Bibliothek, darunter Haskell, und IIRC Clojure.funktionale Sprachen) lol, lese gerade das bei der Verpackung eine F# - lib (DSL-Parser über FParsec). Ich weiß/wie Haskell, Clojure, Scala, und kann immer noch nicht halten Kommentar. Hier kommt er: Vielleicht versuchen Sie einige wirklich Objekt-orientierte Sprache wie Smalltalk - es implementiert If/Else, als eine Bibliothek ;-)))
InformationsquelleAutor
Hier ist etwas code, der funktioniert in der PowerShell 2.0 auf hinzufügen, Typ-Aliase. Aber das problem ist, dass es ist nicht beschränkt. Mit etwas mehr Arbeit könnte man "un-import" in der namespaces -, aber das sollte Euch einen guten start.
Es ist praktisch, aber mit Vorsicht verwenden. Nichts Schlimmeres, als ein Skript zu schreiben, das funktioniert nicht auf einer anderen Maschine. Aus diesem Grund habe ich nie diese Beschleuniger in mein Profil. Wenn überhaupt, werde ich oben von einem Skript, dass die Art und Weise es wird nicht das Add-TypeAccelerator sofort.
InformationsquelleAutor Josh
Wenn Sie nur brauchen zu erstellen eine Instanz des Typs, können Sie speichern den Namen der lange namespace in einen string:
Es ist nicht so mächtig wie die
using
- Direktive in C#, aber wenigstens ist es sehr einfach zu bedienen.InformationsquelleAutor bouvierr
Vielen Dank an alle für Ihren input. Ich habe markiert, Richard Bergs Beitrag als eine Antwort, weil es am meisten ähnelt, was ich Suche.
Alle Ihre Antworten brachten mich auf die Spur, die scheint, die meisten vielversprechend: In seinem blog-post Keith Dahlby schlägt vor, ein Get-Typ commandlet, mit dem Sie einfach consutruction von verschiedenen Typen und generische Methoden.
Ich denke, es gibt keinen Grund, gegen exetending dies auch nach über einem vordefinierten Pfad von Baugruppen für ein Typ ist.
Disclaimer: ich habe nicht gebaut, - doch ...
Hier ist, wie man es nutzen kann:
Folge wäre eine schöne generische Liste von Thingamabob. Natürlich würde ich einpacken alles sans definition der Pfad in nur ein weiteres utility-Funktion. Die erweiterte get-Typ umfassen würde, die einen Schritt zum lösen eines bestimmten Typs gegen den Weg.
InformationsquelleAutor froh42
InformationsquelleAutor Jaqueline Vanek
Ich weiß, dies ist eine alte post, aber ich war auf der Suche für die gleiche Sache, und stieß auf dieses: http://weblogs.asp.net/adweigert/powershell-adding-the-using-statement
Edit: ich nehme an, ich sollte angeben, dass es ermöglicht Ihnen die Verwendung der vertrauten syntax von...
Touche'. Habe ich falsch verstanden, die Frage.
InformationsquelleAutor haliphax