Hey, Scripting Guy!Reguläre Ausdrücke sind unmissverständlich

Die Scripting Guys von Microsoft

Laden Sie den Code für diesen Artikel herunter: HeyScriptingGuy2008_01.exe (150KB)

Jeder macht Fehler.(Dachten Sie etwa, das Scripting Guys-Team wurde dafür absichtlich ins Leben gerufen?)Das Positive an Fehlern ist jedoch – wie bitte?Sie dachten, wir würden sagen, das Positive an Fehlern besteht darin, dass man immer daraus lernen kann?Keineswegs:Das Einzige, was sich aus einem Fehler lernen lässt, ist, dass man ohne Fehler viel besser dran gewesen wäre.

Hinweis:Wir bedauern, aber heute gibt es keine Witze über Microsoft Bob.Wir haben schon einmal den Fehler begangen, uns über Microsoft Bob lustig zu machen. In diesem Fall haben wir tatsächlich aus unserem Fehler gelernt.Was Microsoft Bob betrifft, hüllen wir uns in Schweigen.

Um ehrlich zu sein, können die Scripting Guys eigentlich nicht viel Gutes über Fehler sagen. Daher haben wir unser Leben der Aufgabe geweiht, so wenig Fehler wie möglich zu machen.(Die einzige Möglichkeit, die Zahl unserer Fehler zu minimieren, besteht natürlich darin, so wenig wie möglich zu tun. Doch das ist eine andere Geschichte.)

Alles schön und gut, aber: Was nützt es uns, die Zahl unserer Fehler so gering wie möglich zu halten, wenn die Leute, mit denen wir zusammenarbeiten, weiter Fehler machen?(Nein, wir sagten es bereits:Keine Witze über Microsoft Bob!)Wenn Sie je ein Front-End für ein Datenbankprogramm oder Active Directory® geschrieben haben (und auf viele von Ihnen trifft das zu), dann wissen Sie genau, wovon wir reden:Ihr Front-End-Dateneingabeprogramm ist nur so gut wie die Personen, die die Dateneingabe vornehmen.

Angenommen Sie möchten, dass Vornamen wie folgt eingegeben werden:Ken, beginnend mit einem Großbuchstaben, gefolgt von Kleinbuchstaben.Was geschieht, wenn ein Benutzer den Namen wie folgt eingibt:KEN?Angenommen die Datumseingabe soll folgendermaßen aussehen:01/23/2007. Was geschieht, wenn ein Benutzer ein Datum wie folgt eingibt:23. Januar 2007?Angenommen – das Prinzip ist wohl klar.Wie gesagt, Ihr Front-End-Dateneingabeprogramm ist nur so gut wie die Personen, die die Daten eingeben.Und ob Ihnen das gefällt oder nicht: Diese Personen machen Fehler.Es sei denn, Sie bauen vor und gewährleisten, dass dies nicht geschieht.

Stellen Sie sicher, dass die Daten gültig sind

Das Ende der Spiele

Haben Sie sich je gefragt, auf welches Ereignis sich die Scripting Guys das ganze Jahr lang freuen?Wenn Sie in den vergangenen zwei Jahren das Scriptcenter im Februar besucht haben, tippen Sie vielleicht auf die „Winter Scripting Games“.Falsch geraten.Die Scripting Guys sehen dem Ende der Scripting Games mit Freude entgegen, wenn sie sich – nach zwei Wochen Jux und Dollerei – im Glanze eines weiteren erfolgreichen Scripting Games-Wettbewerbs sonnen und die nächsten vier Wochen schlafen dürfen.

In Vorbereitung auf unser Lieblingsereignis des Jahres – das Ende der Scripting Games – wird es nun also Zeit, die Winter Scripting Games 2008 in Angriff zu nehmen!Besuchen Sie uns vom 15. Februar bis 3. März 2008 im Scriptcenter! Es erwarten Sie mehr als zwei Wochen Skriptingspaß und der beste Skriptingwettbewerb überhaupt.

Die Scripting Games bieten eine hervorragende Möglichkeit, Ihre Fähigkeiten zu testen und zu verbessern.Da die Scripting Guys in diesem Jahr nach dem Wettbewerb noch ein paar Tage länger schlafen wollen, wird der diesjährige Wettbewerb noch größer und besser als im letzten Jahr!Es gibt wieder zwei Gruppen:Anfänger und Fortgeschrittene.Das bedeutet, ob Sie gerade erst anfangen mit dem Skripting, ob sie ein alter Hase (oder junger Profi) sind oder irgendwo dazwischen liegen – dieser Wettbewerb ist das Richtige für Sie.

Was ist nun neu in diesem Jahr?Es wird noch eine weitere Skriptsprache aufgenommen.Sie können mit VBScript, Windows PowerShell oder – das ist neu – Perl am Wettbewerb teilnehmen.(Wir wissen, dass Perl nicht neu ist, aber für den Wettbewerb ist es ein Novum.)Vermutlich wird es noch mehr tolle Sachen geben. Da wir diese Randleiste jedoch Monate im Voraus produzieren müssen, können wir noch nicht mit Einzelheiten dienen.Sie müssen schon ins Scriptcenter kommen, um herauszufinden, was wir uns haben einfallen lassen.

Falls Sie sich fragen – ja, es wird Preise geben.Was für Preise?Wir möchten Ihnen die Überraschung nicht verderben. Kommen Sie ins Scriptcenter und sehen Sie selbst! microsoft.com/technet/scriptcenter/funzone/games/default.mspx.

Viele von Ihnen haben wahrscheinlich bereits Erfahrung mit elementarer Dateneingabeüberprüfung.In vielen Situationen ist diese einfache Dateneingabeüberprüfung völlig ausreichend.Sie müssen sicherstellen, dass der Wert der Zeichenfolge „strName“ aus höchstens 20 Zeichen besteht?Dieser kleine Codeblock erfüllt die Aufgabe:

If Len(strName) > 20 Then
    Wscript.Echo "Invalid name; a " & _
    "name must have 20 or fewer characters."
End If

Angenommen aber, es handelt sich bei strName um eine neue Teilenummer, und Teilenummern müssen einem vorgegebenen Muster entsprechen:vier Ziffern, gefolgt von zwei Großbuchstaben (z. B. 1234AB).Können Sie mit einfachem VBScript überprüfen, ob strName dem erforderlichen Muster für Teilenummern entspricht?Möglich ist das.Aber wirklich alles andere als ideal.Verwenden Sie stattdessen einen regulären Ausdruck.

Stellen Sie sicher, dass ein Wert nur Ziffern enthält

Reguläre Ausdrücke gehen zurück auf die 50er Jahre, als sie erstmals als eine Form der mathematischen Notation beschrieben wurden.In den 60er Jahren wurde dieses mathematische Modell in den QED-Texteditor integriert, als eine Möglichkeit, in einer Textdatei nach Zeichenmustern zu suchen.Einige Zeit später – wie bitte?Aha.Offensichtlich finden nicht alle die Geschichte regulärer Ausdrücke so faszinierend wie wir. Verständlich.Wenn das so ist, zeigen wir Ihnen einfach, was wir meinen.

Sie wollen sicherstellen, dass eine Variable (in diesem Fall die Variable „strSearchString“) nur Ziffern enthält?Abbildung 1 zeigt eine Möglichkeit, dies zu erreichen.

Figure 1 Nur Zahlen, bitte

Set objRegEx = _
  CreateObject("VBScript.RegExp")

objRegEx.Global = True   
objRegEx.Pattern = "\D"

strSearchString = "353627"

Set colMatches = _
  objRegEx.Execute(strSearchString)  

If colMatches.Count > 0 Then
    Wscript.Echo "Invalid: a " & _
      "non-numeric character was found."
Else
    Wscript.Echo "This is a valid entry."
End If

Wie Sie sehen, wird im Skript zunächst eine Instanz des VBScript.RegExp-Objekts erstellt. Sie haben ganz Recht, es ist das Objekt, das es ermöglicht, reguläre Ausdrücke in einem Skript zu verwenden.(Eigentlich wollten wir Ihnen das erklären.)Anschließend weisen Sie zwei Haupteigenschaften des Objekts für reguläre Ausdrücke Werte zu:„Global“ und „Pattern“.

Die Global-Eigenschaft bestimmt, ob das Skript alle Vorkommen eines Musters oder nur das erste Auftreten finden und dann anhalten soll.Im Allgemeinen empfiehlt es sich, für diesen Wert „True“ festzulegen. Das bedeutet, Sie wollen nach allen Vorkommen eines Musters suchen.(Der Standardwert ist „False“.)In den meisten Fällen möchten Sie sicher alle Vorkommen eines Musters finden.Selbst wenn dies nicht der Fall ist: Der einzige Vorteil, nur das erste Auftreten eines Musters zu suchen, besteht darin, dass das Skript schneller ausgeführt wird, wenn es auf halbem Weg durch die Zeichenfolge anhält, anstatt die Suche bis zum Ende fortzusetzen.Theoretisch klingt das gut.In der Praxis wird die Suche jedoch in der Regel so schnell abgeschlossen, dass Sie den Unterschied kaum bemerken.

Hier der gute Teil:Mit der Pattern-Eigenschaft werden die Zeichen (und die Zeichen-„Blaupause“) angegeben, an denen Sie interessiert sind. In diesem Beispielskript suchen Sie nach allen Zeichen, die nicht einer der Ziffern von 0 bis 9 entsprechen. Wenn ein solches Zeichen (ein Buchstabe, ein Satzzeichen oder was auch immer) gefunden wird, wissen Sie, dass der strSearchString zugewiesene Wert nicht gültig ist.In regulären Ausdrücken wird die Syntax \D verwendet, um Übereinstimmungen mit beliebigen Zeichen zu finden, die keine Ziffern sind. Daher weisen Sie der Pattern-Eigenschaft den Wert \D zu.

Hinweis:Woher wussten wir, dass \D jedem Zeichen entspricht, das keine Ziffer ist?Nun, das ist eine lange Geschichte.Also: Vor etlichen Jahren – oh, Sie hätten es lieber etwas kürzer.Wir haben in der VBScript Language Reference auf MSDN® unter msdn2.microsoft.com/1400241x nachgeschlagen.

Nach dem Zuweisen von Werten zu den Global- und Pattern-Eigenschaften wird im nächsten Schritt der Variable „strSearchString“ ein Wert zugewiesen:

strSearchString = "353627"

Woher wissen Sie, ob diese Zeichenfolge Zeichen enthält, die keine Ziffern sind?Das ist ganz einfach.Sie rufen kurzerhand die Execute-Methode auf, die die Variable nach solchen Zeichen durchsucht:

Set colMatches = _
objRegEx.Execute(strSearchString)

Wenn Sie die Execute-Methode aufrufen, werden alle gefundenen Übereinstimmungen (das heißt, alle Instanzen des Musters) automatisch in der Matches-Auflistung gespeichert.(Im Beispielskript wurde dieser Auflistung der Name „colMatches“ gegeben.)Wenn Sie wissen möchten, ob die Variable Zeichen enthält, die keine Ziffern sind, müssen Sie jetzt lediglich den Wert der Count-Eigenschaft der Auflistung überprüfen. Dieser Wert teilt Ihnen mit, wie viele Elemente sich in der Auflistung befinden:

If colMatches.Count > 0 Then
    Wscript.Echo "Invalid: a " & _
      "non-numeric character was found."
Else
    Wscript.Echo "This is a valid entry."
End If

Ist der Wert der Count-Eigenschaft größer als 0, kann das nur eins bedeuten:Irgendwo im Variablenwert wurde ein Zeichen gefunden, das keine Ziffer ist.(Wären alle Zeichen im Wert Ziffern, wäre die Auflistung leer und die Count-Eigenschaft hätte folglich den Wert 0.)Im Beispielskript wird dann zurückgegeben, dass ein nicht numerisches Zeichen entdeckt wurde.Im eigentlichen Skript oder Datenbank-Front-End würde wahrscheinlich eine ähnliche Nachricht zurückgegeben und ein Loopback durchgeführt, damit der Benutzer einen erneuten Versuch unternehmen kann.Doch die Sorge darum überlassen wir Ihnen. Als Scripting Guys müssen wir uns über zahlreiche andere Dinge Gedanken machen.

Zum Beispiel?Zum Beispiel darüber, dass die Leute beim TechNet Magazin die Artikel, die wir ihnen jeden Monat senden, eines Tages vielleicht tatsächlich lesen.Fast wäre es uns lieber, sie würden nicht aus ihren Fehlern lernen.

Ah, gute Frage:Könnten wir nicht einfach mithilfe der IsNumeric-Funktion bestimmen, ob strSearchString eine Zahl enthält?Sicher, vorausgesetzt, dass es sich bei strSearchString um eine beliebige Zahl handeln darf.Was aber, wenn strSearchString einer positiven Ganzzahl entsprechen muss?Das könnte ein Problem sein, denn IsNumeric erkennt jede der folgenden Zahlen als gültige Ziffern:

-45
672.69

Warum werden diese Zahlen als gültige Zahlen erkannt?Weil sie gültige Zahlen sind, nur eben keine Ganzzahlen.Mit dem regulären Ausdruck werden sie hingegen als ungültige Einträge gekennzeichnet, da der reguläre Ausdruck das Minusvorzeichen (–) und den Punkt (.) erfasst, die keine Ziffern sind.Wenn Sie diese Rubrik bis hierhin gelesen haben und sich fragen „Warum lese ich das eigentlich?“, geben wir Ihnen hiermit einen ziemlich guten Grund.

Was meinen Sie?Das reicht nicht aus?Schwieriges Publikum diesen Monat.OK, betrachten wir einige andere Arten der Dateneingabeüberprüfung, die mit regulären Ausdrücken möglich sind.

Stellen Sie sicher, dass ein Wert keine Zahlen enthält

Soeben wurde aufgezeigt, wie Sie sicherstellen, dass ein Wert nur Zahlen enthält.Was aber, wenn das Gegenteil erreicht werden soll, wenn Sie also sicherstellen wollen, dass ein Wert keine Zahlen enthält?Es folgt ein Suchmuster, das dazu verwendet werden kann:

objRegEx.Pattern = "[0-9]"

Was passiert hier eigentlich?Also: In der wilden und verrückten Welt der regulären Ausdrücke geben Ihnen die Klammern ([ und ]) die Möglichkeit, eine Zeichengruppe oder (wie in diesem Beispiel) einen Zeichenbereich anzugeben.Was bedeutet das Muster [0-9]?Es bedeutet, dass nach beliebigen Zeichen im Bereich von 0 bis 9 gesucht wird, oder anders gesagt, nach beliebigen numerischen Werten.Wenn Sie nur gerade Zahlen möchten (das heißt, wenn Sie sicherstellen wollen, dass der Wert keine 1, 3, 5, 7 oder 9 enthält), müssten Sie folgendes Muster verwenden:

objRegEx.Pattern = "[13579]"

Beachten Sie, dass wir nicht nach Zeichenbereichen suchen, da kein Bindestrich verwendet wurde.Tatsächlich werden speziell die Zeichen 1, 3, 5, 7 und 9 gesucht.

Mit dem Muster [0-9] können Sie selbstverständlich nur nach Ziffern suchen. Satzzeichen oder andere Zeichen, die keine Buchstaben, aber auch keine Ziffern sind, werden damit nicht gefunden.Meinen Sie, es könnte ein Muster für die Suche nach allen Zeichen erstellt werden, die keine Buchstaben sind?Selbstverständlich.Mit regulären Ausdrücken lässt sich praktisch alles machen:

objRegEx.Pattern = "[^A-Z][^a-z]"

In diesem Fall werden zwei Kriterien im Muster kombiniert:Es wird nach [^A-Z] und [^a-z] gesucht.Wie Sie sich wahrscheinlich denken können, steht A-Z für den Bereich der Großbuchstaben A bis Z. Was bedeutet nun das Zeichen ^?Wenn es zwischen zwei eckigen Klammern steht, bedeutet das ^: „Suche nach allen Zeichen, die nicht zur Zeichengruppe gehören.“Folglich bedeutet [^A-Z]: „Suche nach allen Zeichen, die keine Großbuchstaben sind.“Hingegen bedeutet [^a-z]: „Suche nach allen Zeichen, die keine Kleinbuchstaben sind.“Das Ergebnis:Das Muster bedeutet, dass nach allen Zeichen gesucht wird, die keine Großbuchstaben oder Kleinbuchstaben sind.Eingeschlossen sind Ziffern, Satzzeichen und andere seltsame Zeichen, die Sie auf Ihrer Tastatur finden.

Allerdings hätte auch für die IgnoreCase-Eigenschaft der Wert „True“ festgelegt werden können:

objRegEx.IgnoreCase = True

In diesem Fall würde bei der Suche die Groß-/Kleinschreibung ignoriert.Sie könnten dann dieses Muster verwenden, das (in Kombination mit der IgnoreCase-Eigenschaft) nach allen Zeichen sucht, die keine Groß- oder Kleinbuchstaben sind:

objRegEx.Pattern = "[^A-Z]"

Stellen Sie sicher, dass eine Teilenummer gültig ist

Lassen wir nun unsere Fantasie ein bisschen spielen.(Mit regulären Ausdrücken lassen sich wirklich viele ausgefallene Sachen anstellen. Einige Beispiele finden Sie auf der Website regexlib.com.)An früherer Stelle in diesem Artikel stellten wurde etwa Folgendes festgestellt:Angenommen es handelt sich bei strName um eine neue Teilenummer, und Teilenummern müssen einem vorgegebenen Muster entsprechen:vier Ziffern, gefolgt von zwei Großbuchstaben (z. B. 1234AB).Wie können Sie nun überprüfen, ob eine Variable diesem Muster entspricht?Natürlich folgendermaßen:

objRegEx.Pattern = "^\d{4}[A-Z]{2}"

Was bedeutet dieses Muster?Was für ein Zufall:Gerade wollten wir die Bedeutung dieses Musters erklären.In diesem Fall gibt es drei Kriterien für die Suche:

^\d{4} 

Das \d bedeutet, dass nach Ziffern gesucht wird (Zeichen im Bereich von 0 bis 9).Was bedeutet {4}?Es bedeutet, dass eine Übereinstimmung mit genau vier der Zeichen gewünscht wird (das heißt, genau vier Ziffern).Folglich suchen Sie nach vier aufeinander folgenden Ziffern.

Und was hat es mit dem Zeichen ^ auf sich?Befindet es sich außerhalb eines Paars eckiger Klammern, weist das ^ darauf hin, dass der Wert mit dem folgenden Muster beginnen muss. Das bedeutet, dass AA1234AB nicht als Treffer angezeigt wird.(Warum?Weil der Wert mit AA beginnt, nicht mit vier aufeinander folgenden Ziffern.)Wenn Sie wollten, könnten Sie mit dem Zeichen $ angeben, dass die Übereinstimmung am Ende der Zeichenfolge auftreten muss.Aber das ist hier nicht erforderlich.(Zumindest nicht in diesem Beispiel.)

[A-Z]{2} 

Sie kennen bereits die Bedeutung der Komponente [A-Z]. Sie steht für einen beliebigen Großbuchstaben.Und die {2}?Ganz genau:Den vier Ziffern müssen genau zwei Großbuchstaben folgen.

Ziemlich einfach, oder?Übrigens: Wenn der Wert der Count-Eigenschaft in diesem Fall 0 beträgt, haben Sie es mit einem ungültigen Wert zu tun.Warum?Diesmal suchen Sie nicht nach einem einzelnen Zeichen, das die Zeichenfolge ungültig machen würde, sondern nach einer genauen Musterübereinstimmung.Wenn keine Übereinstimmung gefunden wird, bedeutet das, der Wert ist ungültig.Außerdem bedeutet es, dass der Wert der Count-Eigenschaft gleich 0 ist.

Hinweis:Zwei weitere nützliche Konstruktionen sind diese:{3,} und {3,7}.Die {3,} bedeutet, es muss mindestens 3 aufeinander folgende Zeichen (oder Ausdrücke) geben. Festgelegt ist jedoch nur das Minimum, nicht das Maximum.Mit \d{3,} ergeben sich Übereinstimmungen mit 123, 1234 und 123456789. Der Ausdruck {3,7} bedeutet, es müssen mindestens 3 aufeinander folgende Zeichen (oder Ausdrücke) vorhanden sein, das Maximum beträgt jedoch 7. Folglich besteht Übereinstimmung mit 123456, mit 123456789 hingegen nicht (mehr als 7 aufeinander folgende Ziffern).

Hier ist ein weiteres nützliches Muster.Angenommen Ihre Teilenummer beginnt mit 4 Ziffern, gefolgt von den Buchstaben US, gefolgt von zwei abschließenden Zeichen (Buchstaben oder Ziffern oder Zeichen anderer Art).Eine Möglichkeit, Übereinstimmungen zu finden, ist folgende:

objRegEx.Pattern = "^\d{4}US.."

Wie Sie sehen, beginnt dieses Muster mit vier Ziffern (\d), denen die Zeichen US (und nur die Zeichen US, mit allen anderen wird keine Übereinstimmung gefunden) folgen müssen.Auf die Zeichen US müssen zwei weitere Zeichen folgen.Wie kennzeichnen Sie in einem regulären Ausdruck ein beliebiges Zeichen?Moment mal, das wissen wir:Ein beliebiges einzelnes Zeichen wird durch einen Punkt (.) gekennzeichnet.Daraus folgt, dass zwei Zeichen durch zwei Punkte gekennzeichnet werden können:

..

OK, das war einfach.Jetzt wird es ein wenig schwieriger.Angenommen diese beiden internen Zeichen geben das Land an, in dem das Teil hergestellt wurde.Wenn es Produktionsanlagen in den USA, in Großbritannien und Spanien gibt, ist jeder der folgenden Zeichencodes aus zwei Buchstaben gültig:US, UK, ES.Wie in aller Welt lässt sich ein Multiple-Choice-Element in einem regulären Ausdruck unterbringen?

Zum Beispiel so:

objRegEx.Pattern = "^\d{4}(US|UK|ES).."

Der Schlüssel ist diese kleine Konstruktion:(US|UK|ES).Die drei akzeptablen Werte (US, UK und ES) wurden in Klammern gesetzt und dabei die einzelnen Werte durch einen senkrechten Strich (|) voneinander getrennt.So funktioniert Multiple Choice in regulären Ausdrücken.

Doch halt:Haben wir nicht gesagt, dass Sie mehrere Optionen in eckige Klammern setzen können?War das nicht der Sinn der Konstruktion [13579]?Stimmt.Das funktioniert jedoch nur bei einzelnen Zeichen. [13579] wird immer als 1, 3, 5, 7 und 9 interpretiert. Wenn Sie 135 und 79 als Optionen verwenden möchten, müssen Sie folgende Syntax verwenden:(135|79). Sie können ein einzelnes Wort, nach dem gesucht werden soll, auch mit Klammern abgrenzen:

objRegEx.Pattern = "(scripting)"

Alternativ lassen Sie die Klammern weg:

objRegEx.Pattern = "scripting"

Hinweis:OK, das ist nützlich. Was aber passiert, wenn die Klammern als Teil des Suchbegriffs eingegeben werden müssen, wenn Sie z. B. nach (scripting) suchen wollen?Es passiert Folgendes: Da die offenen und die geschlossenen Klammern in regulären Ausdrücken als reservierte Zeichen fungieren, müssen Sie jedem Zeichen ein \ voranstellen.Anders ausgedrückt:

objRegEx.Pattern = "\(scripting\)"

Freiheit des Ausdrucks

Das war schon alles für diesen Monat.Wenn Sie mehr über reguläre Ausdrücke erfahren möchten, werfen Sie einen Blick auf den Webcast „Zeichenfolgentheorie für Systemadministratoren:Eine Einführung in reguläre Ausdrücke“ (microsoft.com/technet/scriptcenter/webcasts/archive.mspx).Während Sie sich mit regulären Ausdrücken vertraut machen und diese anwenden, sollten Sie sich die folgenden unvergesslichen Worte von Sophia Loren ins Gedächtnis rufen:„Fehler sind ein Teil dessen, was man für ein erfülltes Leben bezahlt.“

Unglaublich.Da haben die Scripting Guys doch tatsächlich ein erfülltes Leben!

Der Scripting Perplexer von Dr. Scripto

Die monatliche Herausforderung, die nicht nur Ihr Talent zum Rätsellösen testet, sondern auch Ihre Skriptingfähigkeiten.

Januar 2008:Wickeln von Nomen

In diesem Monat hat Dr. Scripto beschlossen, mit Windows PowerShell zu arbeiten.Selbstverständlich können Sie mit Windows PowerShell nicht arbeiten, ohne Cmdlets zu verwenden – jedenfalls nicht, wenn Sie es richtig machen wollen (und Dr. Scripto macht immer alles richtig).Für dieses Rätsel hat Dr. Scripto einige Cmdlets um ein Raster gewickelt, und Sie müssen sie finden.

Wir geben zu, dass dieses Rätsel noch ein wenig verwirrender wäre, wenn das ganze Cmdlet verwendet würde.Wegen der Verb-Nomen-Konstruktion von Cmdlets gibt es Dutzende, die mit „Get-“, „Set-“ usw. beginnen.Daher wurde der Verbteil des Cmdlets (und der Bindestrich) weggelassen, sodass nur die Nomen verbleiben.(Wir verraten Ihnen jedoch, dass das Verb in allen Cmdlets „Get-“ lautete.)

Ihre Aufgabe in diesem Monat besteht darin, die Cmdlet-Nomen abzuwickeln.Die Liste der Nomen, die sich im Rätsel verbergen, stellen wir bereit.(Sind wir nicht großzügig?)Jedes Wort kann senkrecht und waagerecht sowie vorwärts und rückwärts gewickelt werden, nicht jedoch diagonal.Das erste Wort (Location) erhalten Sie als Beispiel.Viel Glück!

Wortliste

Alias
ChildItem
Credential
Date
EventLog
ExecutionPolicy
Location
Member
PSSnapin
TraceSource
Unique
Variable
WMIObject

ANSWER:

Der Scripting Perplexer von Dr. Scripto

Antwort:Wickeln von Nomen, Januar 2008

Die Scripting Guys von MicrosoftDie Scripting Guys von Microsoft arbeiten für Microsoft (oder sind zumindest dort angestellt).Wenn sie nicht gerade ihrem Hobby, dem Baseball (oder verschiedenen anderen Aktivitäten) nachgehen, betreiben sie das TechNet-Skriptcenter.Besuchen Sie es unter www.scriptingguys.com.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.