参考this链接,我试图在我的脚本中引入详细模式。
当我有一个像这样定义的函数 -
function TestVerbose
{
param(
[switch]$verbose,
[Parameter(Mandatory = $True)]
$p1
)
if($verbose)
{
Write-Verbose "Verbose Mode"
}
}
Get-Help TestVerbose
我收到以下错误 -
Get-Help:名为'详细'的参数被定义为多个 命令的次数。在行:12 char:9 + Get-Help<<<< TestVerbose + CategoryInfo:MetadataError:(:) [Get-Help],MetadataException + FullyQualifiedErrorId:ParameterNameAlreadyExistsForCommand,Microsoft.PowerShell.Commands.GetHelpCommand
但是,如果我定义了这样的函数[删除参数强制属性],它可以正常工作
function TestVerbose
{
param(
[switch]$verbose,
$p1
)
if($verbose)
{
Write-Verbose "Verbose Mode"
}
}
Get-Help TestVerbose
知道为什么会出现这样的行为?我想保留强制切换,并希望用户执行我的功能 -
TestVerbose -verbose
答案 0 :(得分:18)
您似乎正在使用PoweShell v2,其中保留了Verbose(以及debug,whatif等)并自动为您提供了它们的功能。该功能已经存在,而不是编写自己的“详细”检测开关。在详细的情况下,您不必在参数声明中指定它,其他参数如whatif需要特殊的synatax。
C:\Users\james> function testverbose{
>> param(
>> [Parameter(Mandatory = $True)]
>> $bar
>> )
>>
>> Write-Verbose "VERBOSE!"
>> $bar
>> }
>>
C:\Users\james> testverbose -bar "woot"
woot
C:\Users\james> testverbose -bar "woot" -Verbose
VERBOSE: VERBOSE!
woot