Warum nicht-PowerShell-Wo-Objekt arbeiten bei der übergabe einer variable?
Die Funktion
function findf {
Write-Host "Find files that match: $args"
gci -r | Where-Object { $_.name -match ".*$args.*" }
}
scheint nicht zu funktionieren. Zum Beispiel,
findf .exe
-- Druckt eine Reihe von Sachen, die nicht Begrenzung der Ausgabe auf EXE-Dateien --
Irgendwelche Ideen was ich falsch mache?
Wenn ich den gleichen Befehl ausführen von PowerShell-Befehlsfenster der Befehl funktioniert:
gci -r | Where-Object { $_.name -match ".*.exe.*" }
Dies funktioniert korrekt und zeigt mir die Dateien mit dem *.EXE-Datei-Muster
Du musst angemeldet sein, um einen Kommentar abzugeben.
$args
ist ein Objekt, das einem Sammlung der Argumente.Sollten Sie entweder:
$args[0]
um die Zeichenfolge, die das erste argumentparam
definieren Sie die input-parameter wie:.
Ich immer befürworten mit
param
wenn möglich, da Sie stark die Art der Variablen wie in dem Beispiel. Sonst könnte es möglich sein, etwas zu tun, was verwirrend wie übergeben Sie ein array als parameter, die dazu führen können alle Arten von hart-zu-Spur-Probleme.$args wird nicht funktionieren, weil der filter ist ein Skript-block, und läuft in einem eigenen Bereich. Jeder Bereich ist entsprechend mit eigenen $args, so dass Sie nicht implizit übergeben $args zu einem untergeordneten Bereich. Da gibt es keine Bestimmung für die übergabe von Argumenten an eine filter-Skript-block, Sie haben etwas wie das hier tun:
Verwendung einer benannten parameter auch funktioniert, denn das wird passieren implizit auf den untergeordneten Bereich.