我正在创建一个调用Write-Verbose
的.ps1脚本。我希望能够启用/禁用这些。
我希望在调用脚本时我可以传递-Verbose
标志,一切都会正常工作。不幸的是,情况似乎并非如此。
详细消息不会写入主机。我环顾四周,发现Supporting -Whatif, -Confirm, -Verbose – In SCRIPTS!
但这是从2007年开始,PS团队成员表示他们正在寻找PS v2的内置支持。
有人对此有任何更新,还是我们必须使用该博客文章中描述的相同技术?
以下是当前行为的示例。
我创建了一个简单的脚本ex01.ps1,其中包含以下内容。
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"
我首先用.\ex01.ps1
执行了脚本,只有1& 2按预期印刷。然后我用.\ex01.ps1 -verbose
执行它,得到了相同的结果。我期待第二次打印所有3行。
答案 0 :(得分:23)
要获得Verbose开关,您需要在脚本中指定CmdletBinding属性。要添加对Confirm和WhatIf开关的支持,请添加SupportsShouldProcess属性并在脚本中调用ShouldProcess方法:
## content of .\ex01.ps1 ##
[CmdletBinding(SupportsShouldProcess=$true)]
Param()
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"
if($PSCmdlet.ShouldProcess($env:COMPUTERNAME,'Remove X'))
{
"do something"
}
###########################
PS > .\ex01.ps1
line 1
line 3
PS > .\ex01.ps1 -Verbose
line 1
VERBOSE: line 2
line 3
PS > .\ex01.ps1 -WhatIf
line 1
line 3
What if: Performing operation "Remove X" on Target "PC1".
答案 1 :(得分:11)
我是一名名副其实的初学者,但这只是让我失望:
如果您的脚本没有任何参数,则不会传递详细开关。把它放在脚本的顶部:
[CmdletBinding()]
Param()
所以你的脚本将是:
[CmdletBinding()]
Param()
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"
答案 2 :(得分:5)
你应该看看Advanced Functions:使用高级功能,你可以利用common -verbose参数。只需以这种方式输出详细输出:
Write-Verbose "Text of debug"
当shell的$ VerbosePreference变量未设置为“SilentlyContinue”(“Continue”将启用输出)时,您将看到详细的输出。
此Windows IP专业文章Part1和spcialy Part2描述了您可以使用高级功能执行的其他操作。您还可以在A guide to PowerShell’s Advanced Functions
中找到分步指南