2016-10-19 12 views
0

Я поставил следующее в моем $PROFILE:Функции «псевдоним», который должен пройти по параметрам

function dir 
{ 
    Get-ChildItem -Force $args 
} 

То, что я хочу, это простая команда «реж», который перечисляет всех файлов, включая скрытые и системных файлов.

Однако, как только я прохожу некоторые параметры по:

dir \ -Directory 

Я вознагражден с полным перечнем моего корня, после этой ошибки:

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

Мое намерение было, конечно, мой маленький «прозвище», созданный в домашних условиях, будет распространяться на это:

Get-ChildItem -Force \ -Directory 

Но вместо этого «-Directory» get s рассматривается как строковый литерал. Как я могу использовать аргументы передающей функции dir, как я думал (а не как массив строк)?

ответ

1

$args - это массив. Если вы используете его, как это:

Get-ChildItem -Force $args 

это то же самое, как если бы вы сделали это:

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

, который работает (в некотором смысле), так как параметр -Path принимает входной массив.

Используйте splatting, чтобы избежать этой ошибки:

Get-ChildItem -Force @args