powershell对象中的十六进制格式

时间:2017-07-03 18:58:02

标签: powershell

我试图获得十六进制输出。这段代码:

    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]}}

但到目前为止没有运气。

3 个答案:

答案 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前缀。