powershell - 从 PowerShell 中的消息中提取
问题描述
也许我正在以错误的方式解决这个问题,但这就是我所拥有和得到的:
Get-WinEvent -FilterHashtable @{logname='security'; id=4663;} | ?{$_.message -match "DELETE" -And $_.message -match "C:\\Shares\\Share" -And $_.message -NotMatch ".tmp|~\\$"} | Select -expand Message
我得到这个输出:
Subject:
Security ID: S-1-5-21-
Account Name: name
Account Domain: domain
Logon ID: 0x9CD04EC
Object:
Object Server: Security
Object Type: File
Object Name: C:\Shares\
Handle ID: 0x5504
Resource Attributes: S:AI
Process Information:
Process ID: 0x4
Process Name:
Access Request Information:
Accesses: DELETE
Access Mask: 0x10000
An attempt was made to access an object.
有没有办法只提取登录 ID 和对象名称?
解决方案
假设您将单个条目的值设置为变量$message
。该值将是包含多行的单个字符串。
您需要搜索字符串的内容,有多种方法可以做到这一点。这里有两种方法:
管道到findstr
:
& "echo" $message | findstr /im /C:"Logon ID"
& "echo" $message | findstr /im /C:"Object Name"
拆分NewLine
,管道到foreach
并使用正则表达式:
$message -split [Environment]::NewLine | foreach{if ($_ -match "Logon ID|Object Name") {$_}}
请注意,这将为您提供如下所示的输出:
Logon ID: 0x9CD04EC
Object Name: C:\Shares\
您仍然需要做一些工作来将这些值与这些行分开。就像是:
$logonID = & "echo" $message | findstr /im /C:"Logon ID"
($logonID -split " ")[1]
推荐阅读
- asp.net-core - Web开发中“映射”的含义是什么?
- excel - 为什么程序停止运行运行时错误“1004”应用程序定义或对象定义的在线错误?
- node-opcua - 将 OPC-UA 节点服务器注册到 LDS
- asp.net-core - 如何在 .NET Core 3.1.x 上写入 HttpContext.Response.Body
- javascript - 如何在 PHP 循环中为 CSS JQ 模型制作唯一标识符
- next.js - 关于 Nextjs 路由的错误
- c# - 如何返回xml枚举属性而不是值c#
- javascript - 如何从本地存储的多个下拉列表中获取值?
- python - 如何检查字符串中的大写字母?
- python - 根据其他列的输入在数据框中创建列