【发布时间】:2018-03-16 17:02:31
【问题描述】:
我正在尝试编写迁移/部署脚本以将应用程序部署到环境(DEV、QA、PROD),并且我需要能够完全记录所有输出。这将包括我专门放在输出流中的任何状态消息(不是问题)以及所有命令的详细输出。例如,如果我打电话给Copy-Item,我希望复制每个项目的完整列表。
我正在尝试找出一种方法在整个脚本中可靠地执行此操作。换句话说,我不想依赖在每个命令中都包含-Verbose(因为将来其他人维护脚本时可能会错过它)。我一直在研究$VerbosePreference 之类的东西,以及使用-Verbose 调用我的主要cmdlet/函数的可能性,希望这两种方法都适用于整个脚本。但情况似乎并非如此。虽然我使用的任何Write-Verbose 命令都尊重这两种方法,但如果我专门将-Verbose 传递给它,则对Copy-Item 的调用只会显示详细列表。我真的希望我只是错过了一些东西!这当然可以做我想做的事!
示例代码:
function Main () {
[CmdletBinding()]
Param()
Begin {
Copy-Item C:\Temp\src\* -Destination C:\Temp\dest -Recurse -Force
Write-Output 'Main output'
Write-Verbose 'Main verbose'
Child
}
}
function Child () {
[CmdletBinding()]
Param()
Begin {
Copy-Item C:\Temp\src\* -Destination C:\Temp\dest -Recurse -Force
Write-Output 'Child output'
Write-Verbose 'Child verbose'
}
}
$VerbosePreference = 'SilentlyContinue'
Write-Output $VerbosePreference
Main
''
Main -Verbose
''
''
$VerbosePreference = 'Continue'
Write-Output $VerbosePreference
Main
''
Main -Verbose
产生输出:
SilentlyContinue
Main output
Child output
Main output
VERBOSE: Main verbose
Child output
VERBOSE: Child verbose
Continue
Main output
VERBOSE: Main verbose
Child output
VERBOSE: Child verbose
Main output
VERBOSE: Main verbose
Child output
VERBOSE: Child verbose
所以,显然$VerbosePreference 和-Verbose 正在影响Write-Verbose,但仅此而已。 Copy-Item 不显示任何输出(尽管如果我专门在该命令上直接使用 -Verbose 会显示)。
有什么想法吗?我对这一切都错了吗?请帮忙!
【问题讨论】:
标签: powershell logging deployment