小编Luc*_*VdV的帖子

Windows 事件日志,您可以对不相等的字符串进行 xpath 过滤吗?

有没有办法过滤特定属性不是 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)

xpath filter event-viewer

5
推荐指数
1
解决办法
5133
查看次数

为什么SyncLock不能在这里工作?

我正在开发一个类库,它将为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在这里不起作用?

vb.net asynccallback synclock

4
推荐指数
1
解决办法
1919
查看次数

为什么只有 1 行的 DataTable.Load 结果表现得好像是 DataRow 而不是 DataTable?

我想查询不同服务器上的两个数据库以获取相同类型的信息,并将结果合并到一个列表中。

我创建了这个示例,它可以工作,但前提是第一个服务器返回至少行。

该示例使用整数列表 (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)

datatable powershell

4
推荐指数
1
解决办法
1135
查看次数