Я бы хотел отключить «общие параметры» PowerShell для одной из моих функций. Я работал над набором расширений для p4.exe (утилита командной строки Perforce), написав такую функцию:
function p4(
[parameter(valuefromremainingarguments=1)]
[string[]]$cmdline)
{
# ...do some fun stuff with $cmdline...
p4.exe $cmdline # for illustration only - actual implementation uses .net objects
}
Смысл в том, чтобы иметь возможность использовать p4 точно так же, как я обычно делаю в командной строке, за исключением того, что иногда магическим образом обрабатываются некоторые параметры (для добавления новых команд или для вызова различных инструментов или чего-либо еще), и всегда будет казаться, что я я просто использую обычную командную строку p4.
Это работает довольно хорошо, пока я не начну использовать такой параметр, как '-o'.
p4 -p 1666 user -o scobi
В этом случае я получаю сообщение об ошибке от PowerShell:
p4 : Parameter cannot be processed because the parameter name 'o' is ambiguous. Possible matches include: -OutVariable -OutBuffer.
Единственный способ, который я нашел, это процитировать мои параметры:
p4 -p 1666 user '-o' scobi
p4 '-p 1666 user -o scobi'
Гадкий, и мешает моей цели сделать эту функцию прозрачным надмножеством p4.exe.
Есть ли магический атрибут, который я могу прикрепить к своей функции, чтобы она говорила оболочке "Я не поддерживаю общие параметры"? Или есть другие способы обойти это?