我试图获得十六进制输出。这段代码:
get-wmiobject -class "Win32_LoggedOnUser" -namespace "root\CIMV2" -Property * | `
Select @{Name="Antecedent";Expression={$_.Antecedent.Split('=').replace("`"","")[2]}}, `
@{Name="Dependent";Expression={$_.Dependent.Split("`"")[1]}}
将生成两列,登录名和logonID,如下所示:
Antecedent Dependent
---------- ----------
SYSTEM 999
LOCAL SERVICE 997
NETWORK SERVICE 996
<user> 347528
<user> 6842494
<user> 46198354
<user> 46171169
DWM-2 223575
DWM-2 223551
事件查看器使用logonID的十六进制表示,例如&#39; SYSTEM&#39;将由0x3e7和999表示,或者在PowerShell中
ps> '{0:x}' -f 999
我试图与之匹敌。
我试图按照以下方式做点什么:
get-wmiobject -class "Win32_LoggedOnUser" -namespace "root\CIMV2" -Property * | `
Select @{Name="Antecedent";Expression={$_.Antecedent.Split('=').replace("`"","")[2]}}, `
@{Name="Dependent";Expression={'{0:x}' -f $_.Dependent.Split("`"")[1]}}
但到目前为止没有运气。
答案 0 :(得分:2)
.Split()
是一个字符串方法。因此,$_.Dependent.Split()
的输出将为[string]
,您希望从int
转换为hex
。因此,您需要在转换前转换为int
。快速查看Dependent
也看起来[int32]
的数字太大,因此[int64]
最好。另外,正如@LotPings指出的那样,您需要在格式化字符串中添加0x
前缀。
Get-WmiObject -Class "Win32_LoggedOnUser" -Namespace "root\CIMV2" -Property Antecedent,Dependent |
Select @{
Name = 'Antecedent'
Expression = {$_.Antecedent.Split('=').replace('"','')[2]}
}, @{
Name = 'Dependent'
Expression = {'0x{0:x}' -f [int64]$_.Dependent.Split('"')[1]}
}
答案 1 :(得分:1)
来自@LotPings&amp;的更新的最终代码@BenH
get-wmiobject -class "Win32_LoggedOnUser" -namespace "root\CIMV2" -Property * | `
Select @{Name="Antecedent";Expression={$_.Antecedent.Split('=').replace("`"","")[2]}}, `
@{Name="Dependent";Expression={'0x{0:x}' -f [int64]$_.Dependent.Split("`"")[1]}}
答案 2 :(得分:0)
这是我认为你想要做的事情的一种方式:
Get-WmiObject Win32_LogonSession | ForEach-Object {
[PSCustomObject] @{
"Account" = $_.GetRelated("Win32_Account").Name
"LogonId" = "{0:X}" -f ([Int] $_.LogonId)
}
}
LogonId
属性似乎是一个字符串,因此您必须强制转换为Int
。如果需要,您可以添加0x
前缀。