PowerShell - 在特定字符后从事件日志输出消息子字符串
PowerShell - Output Message substring from Event-log after specific character
我需要在 PowerShell 中显示事件日志消息的最后一行(“:”之后的几乎所有内容)。我无法做到这一点,所以我的替代方法是输出消息和一个substring。我消息中的“:”位于 200-ish 位置。下面的代码在“:”-ish 之后显示 56 个字符。
如何让它显示“:”之后的所有内容?
Get-Eventlog -Logname Application -Source "HELPME" | format-table timewritten, @{l="User";e={$_.message.substring(309, 56)}} -wrap -autosize
以下是示例消息,如果有帮助的话:
无法在来源 'HELPME' 中找到事件 ID“1234567890”的描述。本地计算机可能没有显示消息所需的注册信息或消息 DLL 文件,或者您可能没有访问它们的权限。以下信息是活动的一部分**:** 'Blah', 'Blahh', 'Blahhh'
我只需要显示时间的代码和 'Blah'、'Blahh'、'Blahhh'。
这可能比您预期的要简单。字符串有一个名为 LastIndexOf() 的方法,您可以将其与 Substring() 方法一起使用。如果您省略长度,它应该只输出超出您指定的起始位置的所有内容,如果您使用 LastIndexOf,它将显示最后一个 : 在您的字符串中的位置。所以,这个:
$_.message.substring(($_.message.lastindexof(':')+1))
这将只输出 : 之后的消息部分,这就是为什么我在上面加上 +1,否则它包括冒号。
我需要在 PowerShell 中显示事件日志消息的最后一行(“:”之后的几乎所有内容)。我无法做到这一点,所以我的替代方法是输出消息和一个substring。我消息中的“:”位于 200-ish 位置。下面的代码在“:”-ish 之后显示 56 个字符。
如何让它显示“:”之后的所有内容?
Get-Eventlog -Logname Application -Source "HELPME" | format-table timewritten, @{l="User";e={$_.message.substring(309, 56)}} -wrap -autosize
以下是示例消息,如果有帮助的话:
无法在来源 'HELPME' 中找到事件 ID“1234567890”的描述。本地计算机可能没有显示消息所需的注册信息或消息 DLL 文件,或者您可能没有访问它们的权限。以下信息是活动的一部分**:** 'Blah', 'Blahh', 'Blahhh'
我只需要显示时间的代码和 'Blah'、'Blahh'、'Blahhh'。
这可能比您预期的要简单。字符串有一个名为 LastIndexOf() 的方法,您可以将其与 Substring() 方法一起使用。如果您省略长度,它应该只输出超出您指定的起始位置的所有内容,如果您使用 LastIndexOf,它将显示最后一个 : 在您的字符串中的位置。所以,这个:
$_.message.substring(($_.message.lastindexof(':')+1))
这将只输出 : 之后的消息部分,这就是为什么我在上面加上 +1,否则它包括冒号。