如果我有一个名为 caller.ps1 的 powershell 脚本,它看起来像这样
.\Lib\library.ps1
$output = SomeLibraryFunction
library.ps1 如下所示
function SomeLibraryFunction()
{
Write-Output "Some meaningful function logging text"
Write-Output "return value"
}
我想要实现的是一种方法,其中库函数可以返回它的值,但也可以添加一些日志消息,允许调用者按他们认为合适的方式处理这些内部消息。我能想到的最好办法是将两者都写入管道,然后调用者将拥有一个数组,其中包含实际返回值以及可能对调用脚本具有的记录器有用的内部消息。
我是否以正确的方式解决这个问题?有没有更好的方法来实现这一点?
最佳答案
将日志消息与实际输出混合通常不是一个好主意。然后,您函数的消费者必须进行大量过滤才能找到他们真正想要的对象。
您的函数应该将日志消息写入详细输出流。如果调用者想要查看这些消息,可以通过指定 -Verbose
切换到您的函数。
function SomeLibraryFunction()
{
[CmdletBinding()]
param(
)
Write-Verbose "Some meaningful function logging text"
Write-Output "return value"
}
在 PowerShell 3+ 中,消费者可以 redirect your verbose messages to the output stream or a file :
# Show verbose logging messages on the console
SomeLibraryFunction -Verbose
# Send verbose logging messages to a file
SomeLibraryFunction -Verbose 4> verbose.txt
# redirect verbose message to the output stream
SomeLibraryFunction -Verbose 4>&1
其他选项包括:
- 写入众所周知的文件
- 写入事件日志
- 使用
Start-Transcript
创建 session 日志。
关于powershell - 在 Powershell 中适当登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552550/