Tipp: Sperrige Parameterbindung beim Select-String-Cmdlet

Das Select-String-Cmdlet besitzt drei Parameter, die ihren Wert aus der Pipeline beziehen können: Path, LiteralPath und InputObject. Der Path-Parameter wird per PropertyName gebunden, so dass der folgende Befehl funktionieren sollte:

Der Befehl soll alle als Skriptmodul implementierten DSC-Ressourcendateien durchgehen und jene Zeilen ausgeben, in denen das Wort „class“ enthalten ist, dem kein Minuszeichen vorausgeht. Doch leider gibt der Befehl gar nichts aus.

Der Hintergrund ist, dass obwohl der Path-Parameter seinen Wert aus der Pipeline holen kann, der InputObject-Parameter sich diesen Wert holt, da er ByValue funktioniert und diese Bindungsvariante Vorrang hat. Die Pfade werden daher dem InputObject-Parameter übergeben und nicht dem Path-Parameter, so dass anstelle des Inhalts der jeweiligen Datei der Pfad der Datei durchsucht wird.

Die Lösung ist nicht kompliziert, aber auch nicht besonders elegant. Sie besteht darin, auf die Pipeline zu verzichten und die Pfade direkt der Path-Eigenschaft zu übergeben.

Auch wenn das Verhalten „by design“ ist, ganz optimal ist es aus meiner Sicht nicht. Für mich wäre es logischer, wenn zuerst geprüft wird, ob das Objekt in der Pipeline eine Eigenschaft besitzt, deren Name dem Namen eines bindungsfähigen Parameters entspricht und erst, wenn das nicht der Fall ist, versucht wird den Wert in der Pipeline dem dafür vorgesehenen Parameter zuzuordnen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden .