添加自定义属性或替换只读属性

时间:2016-12-08 12:43:02

标签: powershell

我正在尝试自动化一个循环,通过我们的服务器从eventviewer收集日志,然后导出到一个工作正常的网页,但是,我想在此列表中添加一个属性,或者可能修改现有的读取唯一的财产。

以下是我正在使用的脚本:

$eventlog = (Get-EventLog -LogName system -Newest 5 -EntryType Error)
$eventlog | Select-Object Source,Message,MachineName | ConvertTo-Html -Head $a | Out-File C:\logs.htm  

这里唯一真正的问题是属性“MachineName”列出“name.domain.com”而不仅仅是“name”,所以我继续添加以下内容:

$eventlog | ForEach-Object {
$_.MachineName=$env:COMPUTERNAME
}  

这已经停止,因为该属性是只读的,所以我想我可以在我的对象中添加一个属性,并用一个我仍然认为应该工作的变量填充它但是我没有得到{{{ 1}}完全有效 我是这样做的:

Add-Member

$eventlog | Add-Member -Name Hostname -Value $env:COMPUTERNAME  

显然,仅此一项不起作用,但我无法理解剩下的参数应该如何看待。我也相当肯定上面的那条线甚至不对,但它足以让你理解我想要实现的目标,也许还有更好的解决方案!

2 个答案:

答案 0 :(得分:1)

$eventlog | Add-Member -Name 'Hostname' -Value $env:COMPUTERNAME -MemberType NoteProperty
$eventlog | Select ...,hostname | ConvertTo-Html -Head $a | Out-File C:\logs.htm 

答案 1 :(得分:1)

您可以使用计算属性。这样您就可以修改只读属性或添加新....

$eventlog = (Get-EventLog -LogName system -Newest 5 -EntryType Error)
$eventlog | Select-Object Source,Message, @{l='MachineName'; e={$env:COMPUTERNAME}} | 
    ConvertTo-Html -Head $a | 
    Out-File C:\logs.htm