【发布时间】:2020-08-23 15:10:06
【问题描述】:
我想在 powershell 5.1 中将 get-winevent 的默认输出更改为如下所示,因此标题显示的是 LogName 而不是 ProviderName。
get-winevent application -MaxEvents 1
LogName: Application
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
8/23/2020 10:32:25 AM 0
我可以在 powershell 7 中非常轻松地做到这一点,方法是在 $PSHOME 下的某处编辑 Event.format.ps1xml:
<ViewSelectedBy>
<TypeName>System.Diagnostics.Eventing.Reader.EventLogRecord</TypeName>
</ViewSelectedBy>
<GroupBy>
<PropertyName>LogName</PropertyName>
<Label>LogName</Label>
</GroupBy>
但在 powershell 5.1 中,更改所有权和安全性以便我可以写入该文件后,相同的更改似乎没有效果!似乎 get-winevent 完全忽略了该文件。如何进行此更改?
cd $pshome
takeown /f Event.Format.ps1xml /a
icacls event.format.ps1xml /grant administrators:w
我认为这种格式是在 c# 中的某个地方定义的? Remove generated types and formats for Microsoft.PowerShell.Diagnostics #1218
【问题讨论】:
-
事后你还记得
Update-FormatData吗? -
@MathiasR.Jessen 没有,但我已经重新启动了 powershell,再次登录等。我现在刚刚尝试过,但没有效果。
-
我记得 Don Jones 说过 ps1xml 文件是经过数字签名的,您不应该修改原件,而应制作副本。我已经确认无需更改任何权限,我可以简单地将文件复制到另一个位置,修改它,然后
Update-TypeData -Appendpath \path\to\new.ps1xml并且它工作正常。这还不够吗? -
about_format.ps1xml 表示“从 PowerShell 6 开始,默认视图在 PowerShell 源代码中定义。PowerShell 5.1 和更早版本的 Format.ps1xml 文件在 PowerShell 6 和更高版本中不存在. PowerShell 源代码定义了 PowerShell 控制台中对象的默认显示。您可以创建自己的 Format.ps1xml 文件来更改对象的显示或为您在 PowerShell 中创建的新对象类型定义默认显示。"
-
@DougMaurer 是的,制作新格式文件是一种解决方案。文档不正确,这并不罕见。该文件仍然存在,但它位于 $pshome\Modules\Microsoft.PowerShell.Diagnostics\event.format.ps1xml 中。我毫不费力地对其进行了修改并使其生效。在 powershell 5.1 中,该文件位于 $pshome\event.format.ps1xml 但没有任何用途。
标签: powershell format get-winevent