Mat*_*att 5 powershell powershell-2.0
我这里有两个选择语句.来自第一个(消息,用户名,时间生成)的"标题"用于第二个(用户名,时间生成).
请查看echo语句,以查看表\ outputs是否合并为一个.
有谁能解释为什么?
这需要在ps1脚本中运行才能看到怪异:
$before = get-date
$after = (get-date).AddDays(-1)
$a = Get-EventLog System -Before $before -After $after | ? {$_.Message -like "*start*"}
$a | select message, username,timegenerated
echo "----going through security----"
$b = Get-Eventlog security -Before $before -After $after |?{$_.category -match "Logon/Logoff" }
$b | select username,timegenerated
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
Message UserName TimeGenerated
------- -------- -------------
The Engine service was successfully sent a star... NT AUTHORITY\SYSTEM 22/09/2011 09:32:09
The Engine service was successfully sent a star... NT AUTHORITY\SYSTEM 21/09/2011 16:03:57
The Licensing Service service was successfu... DOMAIN\username 21/09/2011 15:58:12
----going through security----
DOMAIN\9876ABC$ 22/09/2011 14:05:41
DOMAIN\9876ABC$ 22/09/2011 14:04:58
DOMAIN\9876ABC$ 22/09/2011 14:03:40
DOMAIN\9876ABC$ 22/09/2011 14:02:57
NT AUTHORITY\LOCAL SERVICE 22/09/2011 14:01:59
Run Code Online (Sandbox Code Playgroud)
看起来像是格式问题,但以下内容似乎按预期工作:
$before = get-date
$after = (get-date).AddDays(-1)
$a = Get-EventLog System -Before $before -After $after | ? {$_.Message -like "*start*"}
$a | select message, username,timegenerated | format-table -force
echo "----going through security----"
$b = Get-Eventlog security -Before $before -After $after |?{$_.category -match "Logon/Logoff" }
$b | select username,timegenerated | format-table -force
Run Code Online (Sandbox Code Playgroud)
此外,这看起来肯定像是与多个自定义 psobject 的输出有关的错误(上面由于执行选择而创建)。
以下代码显式地为每个查询结果创建一个单独的 PSObject,并返回与您的代码相同的结果(即仅一组标题):
$before = get-date
$after = (get-date).AddDays(-1)
$a = Get-EventLog System -Before $before -After $after | ? {$_.Message -like "*start*"}
$a = $a | `
% {New-Object PSObject -Property `
@{Message = $_.message; Username = $_.username; Timegenerated = $_.timegenerated}
}
$a
echo "----going through security----"
$b = Get-Eventlog security -Before $before -After $after |?{$_.category -match "Logon/Logoff" }
$b = $b | `
% {New-Object PSObject -Property `
@{Username = $_.username; Timegenerated = $_.timegenerated}
}
$b
Run Code Online (Sandbox Code Playgroud)
在 PS_ISE 中运行并执行:
$a | gm
$b | gm
Run Code Online (Sandbox Code Playgroud)
您可以看到它们是具有不同属性的不同对象。如果您在对象之间不使用相同的键名称,事情会变得更加奇怪;如果我们改变的话,看看返回的结果:
$b = $b | `
% {New-Object PSObject -Property `
@{Username = $_.username; Timegenerated = $_.timegenerated}
}
Run Code Online (Sandbox Code Playgroud)
到:
$b = $b | `
% {New-Object PSObject -Property `
@{UsernameB = $_.username; TimegeneratedB = $_.timegenerated}
}
Run Code Online (Sandbox Code Playgroud)
对于那些不愿意运行此程序的人,它会在安全结果集应在的位置返回空格。再次运行 Get-Member 将显示两个自定义对象,每个对象都有自己的属性。
尽管看起来 PSCustomObjects可能会在 v3 中进行彻底修改,但可能值得使用 Microsoft Connect 记录这一点,请参阅此处。
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |