有没有办法过滤特定属性不是 Windows (Server 2016) 事件查看器的 XPath 有限方言中的给定字符串的事件?
我正在尝试查看登录事件,但仅查看实际用户登录(控制台和 RDP)。
这被接受为过滤器,但给出了太多的结果,好像最后的 AND 项被忽略了:
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security">
*[System[(EventID=4624)]]
and *[EventData[Data[@Name='LogonType'] and (Data=1 or Data=8 or Data=9)]]
and *[EventData[Data[@Name='TargetUserName'] and (Data!='SYSTEM')]]
</Select> </Query> </QueryList>
Run Code Online (Sandbox Code Playgroud)
当我将第三个测试更改为此时,它被标记为“无效查询”。
and not *[EventData[Data[@Name='TargetUserName'] and (Data='SYSTEM')]]
Run Code Online (Sandbox Code Playgroud)
然而,我找到了另一个 XPath 问题的答案,该问题建议更喜欢这种形式,因为当比较的一侧是一个集合而不是一个值时,!= 给出了错误的结果。
与此相同,无效查询
and *[EventData[Data[@Name='TargetUserName'] and not (Data='SYSTEM')]]
Run Code Online (Sandbox Code Playgroud)
或这个
and *[EventData[Data[@Name='TargetUserName'] and !(Data='SYSTEM')]]
Run Code Online (Sandbox Code Playgroud) 我正在开发一个类库,它将为CLR应用程序提供异步通信.
SslStream上有异步读取(BeginRead),其中一个回调例程由多个流共享.我不希望在调试期间并行处理回调,所以我创建了一个关键部分:
Private Sub Callback_Read(ByVal ar As IAsyncResult)
Static OneAtATime As New Object
SyncLock OneAtATime
Dim ThisSslStream As SslStream = DirectCast(ar.AsyncState, SslStream)
...
End SyncLock
End Sub
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这不起作用,至少在我在SyncLock块中设置断点时是这样.多个流的回调同时在其中运行,而无需在入口点等待,直到前一个线程离开它为止.
单步执行它是一场噩梦,特别是当流同时关闭(关闭)时:执行流1的行,执行流2的行,执行下一行1,执行下一行2,依此类推,通过整个块.
我想也许你需要的东西不仅仅是一个通用的"新对象",但后来我看到这里至少有一个关于堆栈溢出的答案,说明SyncLock正是我使用它的方式,只是"静态X作为新对象"在必须锁定的函数内创建同步对象.
是因为回调实际上来自.Net框架之外的win32线程,SyncLock在这里不起作用?
我想查询不同服务器上的两个数据库以获取相同类型的信息,并将结果合并到一个列表中。
我创建了这个示例,它可以工作,但前提是第一个服务器返回至少两行。
该示例使用整数列表 (1 .. 5),但我连接两个字符串列表的原始代码也存在相同的问题。
# 'quick and dirty' sample
# to be considered insecure,
# do not use as a basis for production code.
function GetData($dbserver, $start, $end)
{
$qry = "WITH q AS (SELECT $start AS num UNION ALL SELECT num + 1 FROM q WHERE num < $end) SELECT * FROM q"
$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString = "server=$dbserver;database=A2SDataCentral;Integrated Security=SSPI"
$con.Open()
$com = $con.CreateCommand()
$com.CommandText = $qry
$res = $com.ExecuteReader()
$table = New-Object System.Data.DataTable …Run Code Online (Sandbox Code Playgroud)