2016-10-19 2 views
0

ich habe folgendes setzen in meine $PROFILE:Eine Funktion „Alias“, das entlang passieren muss Parameter

function dir 
{ 
    Get-ChildItem -Force $args 
} 

Was ich will, ist ein einfacher „dir“ Befehl, der alle Dateien auflistet, darunter verborgen und Systemdateien.

aber sobald ich passieren einige Parameter an:

dir \ -Directory 

ich mit einer vollständigen Liste meiner Wurzel von diesem Fehler gefolgt belohnt bin:

Get-ChildItem : Cannot find path 'C:\Users\myuser-Directory' because it does not exist.

Meine Absicht war es natürlich, dass mein kleiner homebrewed "alias" würde in diese erweitern:

Get-ChildItem -Force \ -Directory 

Doch statt "-Directory" bekommen s wird als String-Literal behandelt. Wie kann ich erreichen, dass meine dir-Funktion Argumente so übergibt, wie ich es vorhabe (und nicht als ein Array von Strings)?

Antwort

1

$args ist ein Array. Wenn Sie es wie folgt verwenden:

Get-ChildItem -Force $args 

ist es das gleiche, als ob du das getan hast:

Get-ChildItem -Force -Path '\', '-Directory' 

, die (in einer Art und Weise) funktioniert, weil der Parameter -Path Array-Eingang akzeptiert.

Verwenden splatting diese Gefahr zu vermeiden:

Get-ChildItem -Force @args 
Verwandte Themen