簡體   English   中英

如何從powershell命令的結果中獲取特定屬性的值

[英]How to get the value of a particular propery from the result of a powershell command

我有一個變量$結果,其值是:

SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 rdp-tcp#1         account17                 7  Active  rdpwd

我想單獨獲取ID的值並在其他查詢中使用它。

我嘗試了以下方法:

1. $idValue = @($result | %{ $_.ID }) -但未獲取值。

2. $result |Select -ExpandProperty ID我收到錯誤“選擇對象:找不到屬性“ ID””。

如何從結果中單獨獲取屬性ID的值?

qwinsta / query命令的輸出是字符串,而不是對象,因此沒有要打印的屬性ID 如果要將字段作為屬性,則需要將字符串轉換為對象:

query session | ? { $_ -match '^[ >](\S+) +(\S*?) +(\d+) +(\S+)' } |
  select @{n='Service';e={$matches[1]}},
         @{n='Username';e={$matches[2]}}, 
         @{n='ID';e={$matches[3]}},
         @{n='Status';e={$matches[4]}} | % {
  $_.ID
}

或者,如果您僅對ID感興趣,則可以執行如下正則表達式替換:

$account = 'account17'
$pattern = '^[ >]\S+ +\S*? +(\d+) +\S+.*'

(query session $account | select -Skip 1) -replace $pattern, '$1'

這是正確引用單個屬性的格式。 我看不到用於創建RDP $ result的命令,因此我將以get-process為例,將其封裝為(),然后將().ID附加到最​​后。 適用於任何屬性,而不僅僅是.ID

(get-process | where {$_.Name -eq "Powershell"}|select ID).ID
# or
$MYID = (get-process | where {$_.Name -eq "Powershell"}|select ID).ID
$MYID

另一個選項是-split:

使用V4的一種解決方案:

($result).ForEach({($_ -split '\s+')[2]}) -match '\d'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM