首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Powershell脚本对-verbose的支持

Powershell脚本对-verbose的支持
EN

Stack Overflow用户
提问于 2011-12-12 12:07:19
回答 3查看 19.4K关注 0票数 22

我正在创建一个调用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行代码。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-12 15:44:31

为了使用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".
票数 25
EN

Stack Overflow用户

发布于 2012-06-30 23:26:06

我是一个powershell初学者,但这让我被绊倒了:

如果您的脚本没有任何参数,详细开关将不会被传递。只需将这段代码放在脚本的顶部:

[CmdletBinding()]
Param()

所以你的脚本应该是:

[CmdletBinding()]
Param()
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"
票数 12
EN

Stack Overflow用户

发布于 2011-12-12 12:32:47

你应该看看Advanced Functions:有了高级函数,你就可以利用通用的-verbose参数。只需这样输出您的详细输出:

Write-Verbose "Text of debug"

当外壳的$VerbosePreference变量没有设置为"SilentlyContinue“时("Continue”将启用输出),您将看到详细的输出。

这篇Windows文章Part1和特殊的Part2描述了你还可以用高级功能做什么。您还可以在A guide to PowerShell’s Advanced Functions中找到分步指南

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8469821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档