2012-04-09 53 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中进行此更改(在编写发布候选版本时)将返回这些属性值的数组。

相关问题