powershell - Powershell脚本支持-verbose

标签 powershell

我正在创建一个调用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执行了它,并得到了相同的结果。我期望所有三行都将第二次打印出来。

最佳答案

为了使用详细开关,您需要在脚本中指定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".

关于powershell - Powershell脚本支持-verbose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469821/

相关文章:

c# - 从 C# 应用程序运行时未导入 Web 管理模块

powershell - 尝试捕捉实际上不会捕捉

powershell - PSModulePath 环境属性是如何组成的?

powershell - Pester 测试非导出的 PowerShell cmdlet/函数

powershell - 比较两个不同的CSV文件并发送电子邮件

powershell - 无法将 PS 输出写入文件

google-chrome - 使用注册表项修复在 Chrome 中启用 Silverlight 插件 (NPAPI)

asp.net - 无法让 AWS Elastic Beanstalk 命令行工具在 Windows 8 上运行。出现以下 PowerShell 错误?

powershell - 在powershell中将参数传递给Set-Alias的正确方法是什么?

windows - 在 PowerShell 中,如何从所有 SID 的 HKEY_Users 中提取文件?