PS Scripting的新手,我正在寻求以下戴尔服务器要求的帮助:
读取事件ID 2048的系统事件日志,提取生成偶数的时间,特定RAID控制器上的物理磁盘编号。
例如:
Get-WinEvent -FilterHashtable @{logname='System' ; id=2048} -MaxEvents 1
返回输出:
ProviderName: Server Administrator
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
3/26/2018 1:18:51 AM 2048 Error Device failed: Physical Disk 0:0:13 Controller 0, Connector 0
我想以下列格式提取磁盘和控制器编号以及日期:
**Disk-Failure, Date = 3/26/2018 1:18:51 AM , Physical Disk Number = 0:0:13 , Controller = 0 , Connector = 0**
请协助。
谢谢。
答案 0 :(得分:1)
正则表达式可能是解决此问题的好方法。它可以从消息属性中选择项目。
[regex]$rx = '.*Physical Disk (?<pd>.*) Controller (?<ctrl>.*), Connector (?<conn>.*).*'
Get-WinEvent -FilterHashtable @{logname='System' ; id=2048} -MaxEvents 1 |
ForEach-Object {
$r = $rx.Match($_.Message)
$pd = $r.Groups['pd'].Value
$ctrl = $r.Groups['ctrl'].Value
$conn = $r.Groups['conn'].Value
%{[string]::Format('**Disk-Failure, Date {0} , Physical Disk Number = {1} , Controller = {2} , Connector {3}', `
$_.TimeCreated, $pd, $ctrl, $conn)}
}
为了测试这一点,由于我的机器上没有任何磁盘故障,因此我创建了一个具有Get-WinEvent
所呈现属性的对象。
$properties = @{'TimeCreated'='3/26/2018 1:18:51 AM';
'Id'=2018;
'LevelDisplayName'='Error';
'Message'= 'Device failed: Physical Disk 0:0:13 Controller 0, Connector 0'}
$object = New-Object -TypeName PSObject -Prop $properties