将cmdlet的结果值存储在Powershell中的变量中
问题描述:
我想运行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
答
使用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
答
只需访问该对象的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中进行此更改(在编写发布候选版本时)将返回这些属性值的数组。
这是非常有益的,谢谢 – Lgn 2012-04-09 12:53:50
你能看看我的问题2吗? – Lgn 2012-04-09 13:27:20
@Lgn - 更新。 – manojlds 2012-04-09 13:49:05