2012-04-09 84 views
8

我想運行cmdlet並將結果的存儲在變量中。將cmdlet的結果值存儲在Powershell中的變量中

例如

C:\PS>Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority 

它列出與標頭優先級。第一個例如:

Priority 
-------- 
8 

如何將它們存儲在變量中?我已經試過:

$var=Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority 

現在變量是:@{Priority=8},我想它是8

問題2:

我可以用一個cmdlet存儲兩個變量嗎?我的意思是把它存儲在管道後面。

C:\PS>Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority, ProcessID 

我想避免這種情況:

$prio=Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority 
$pid=Get-WSManInstance -enumerate wmicimv2/win32_process | select ProcessID 

回答

19

使用Select-Object

$var=Get-WSManInstance -enumerate wmicimv2/win32_process | select -expand Priority 

更新的-ExpandProperty標誌回答另一個問題:

請注意,可以爲以及訪問該物業:

$var=(Get-WSManInstance -enumerate wmicimv2/win32_process).Priority 

因此,要獲得這些多爲變量:

$var=Get-WSManInstance -enumerate wmicimv2/win32_process 
    $prio = $var.Priority 
    $pid = $var.ProcessID 
+0

這是非常有益的,謝謝 – Lgn 2012-04-09 12:53:50

+0

你能看看我的問題2嗎? – Lgn 2012-04-09 13:27:20

+1

@Lgn - 更新。 – manojlds 2012-04-09 13:49:05

2

只需訪問該對象的Priority財產從管道返回:

$var = (Get-WSManInstance -enumerate wmicimv2/win32_process).Priority 

(這不會如果Get-WSManInstance工作返回多個對象。)

對於第二個問題:獲得兩個屬性有多種選擇,problably最簡單的是具有有一個可變*含有兩個單獨的屬性的對象:

$var = (Get-WSManInstance -enumerate wmicimv2/win32_process | select -first 1 Priority, ProcessID) 

和然後使用,假設只有一個進程:

$var.Priority 

$var.ProcessID 

如果有多個進程$var將是一個陣列,其可以索引,因此獲取第一個過程的性質(使用陣列文本語法@(...)因此它總是集合):

$var = @(Get-WSManInstance -enumerate wmicimv2/win32_process | select -first 1 Priority, ProcessID) 

,然後使用:

$var[0].Priority 
$var[0].ProcessID 

PowerShell的有益用於命令行,但並非如此有益在腳本中有一些額外的邏輯,當將管道的結果分配給一個變量:如果沒有對象返回,則設置$null,如果返回一個則分配該對象,否則分配一個數組。強制數組返回一個包含零個,一個或多個(分別)元素的數組。

使用對象數組的成員屬性在PowerShell V3中進行此更改(在編寫發佈候選版本時)將返回這些屬性值的數組。

相關問題