我正在构建一个脚本来监视我的事件日志。此命令仅收集“错误”和“警告”消息并将它们放入 $entries 数组。
$entries = $log.Entries |
? {$_.TimeWritten -gt ($(Get-Date).AddDays(-2)) -and `
(($_.EntryType -like "Error") -or `
($_.EntryType -like "Warning"))} |
Format-Table -wrap
如果我在控制台中输出 $entries,它会显示我想要的 - 日志条目 - 但如果我将其输出到文本文件(Add-Content $output $entries),我只会得到 .NET 类名(System.Diagnostics .EventLogEntry)。我也尝试过 foreach ($entry in $entries),结果相似。
我在这里缺少什么基本的 PowerShell 原则?
基本上 - add-content/set-content 命令只是对传递给它的任何内容执行 ToString() 。对于许多 .NET 对象,这只是类名。
如果你这样做:
out-string -inputobject $entries | 添加内容“yourfile.txt”
这应该正确转换为字符串并将其输出到您的文本文件。
添加内容会给你这种行为,如果你想要字段而不是对象描述,那么最简单的方法就是使用传统的文件重定向,例如
或者
如果你想追加。这正如我所期望的那样适用于您的示例代码,而您的示例
只为我输出对象类型描述(例如 Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData )。
管道通过: | 添加内容 $output
当传输的内容包含许多行时,它似乎无法正常工作。
例如:
在上面的示例中,test.txt 文件被正确创建,包括开头的注释。但是,Get-ItemProperty 输出显示为中文字符。