Ответ 1
Извините, вы не можете. -Debug
является общим параметром, поэтому -Debug
и -db
являются переключателями, которые доступны практически во всем, включая функции, которые вы пишете сами. Как сообщает вам ошибка, она уже определена.
Даже если бы можно было обходить неопределенные встроенные псевдонимы, это неожиданно меняет смысл вызова типа test-db -db
для кого-то другого, который часто использует -db
вместо -Debug
. Они ожидают, что он включит вывод отладки, не указывая другой параметр.
Рассмотрим эту функцию:
function test-db{
param(
[parameter(mandatory=$true)]
[string]$database)
write-host 'database' $database
write-debug 'debugging output'
}
Теперь назовите его test-db server
, test-db -db server
и test-db server -db
. Первый не делает write-debug
, а остальные 2 - независимо от того, где -db
. Вы также не можете определить отдельный параметр [string]$db
(или переименовать $database
в $db
), потому что Powershell выдаст вам эту ошибку:
Параметр "db" не может быть указан, поскольку он конфликтует с псевдонимом параметра с тем же именем для параметра "Debug".
Подробнее об этом, за MSDN:
В дополнение к использованию атрибута AliasAttribute Windows Среда исполнения PowerShell выполняет частичное совпадение имен, даже если никакие псевдонимы указаны. Например, если ваш командлет имеет параметр FileName и это единственный параметр, который начинается с F, пользователь может введите имя файла, Filenam, файл, Fi или F и все еще распознайте запись как параметр FileName.