Powershell实战之管道参数绑定

  管道参数通过两种方式传递:ByValue和ByPropertyName,通过help查看命令是否支持这两种参数传递方式

1.ByValue

如果支持ByValue的方式,则匹配到对象类型,可以直接通过管道传递

get-process -name note* | stop-process

get-process 获取的对象类型可以通过get-member查看,为proecss,因此在这个示例中匹配ByValue方式进行管道传送

 

2.ByPropertyName

 ByPropertyName则要求管道两端的对象拥有相同的属性名称,这样就能进行匹配

import-csv .\Computers.csv | get-process

在此示例中Computer.csv中属性必须写成ComputerName,这样就能与get-process中的ComputerName匹配上

对于属性名称不一致的情况,可以通过自定义属性,修改属性的名称,使两边匹配上

import-csv .\Computers.csv | select -property *, @{name='ComputerName';expression={$_.Computer}}

@{}用来创建一个哈希表,其中包含成对的健-值(Key-Value)

name/n/label/l : 新的属性名称

expression/e   : 包含{} 的脚本块

$_ 是一个占位符,关联到已经存在的管道对象,通过$_可以读取管道中的对象属性Computer

以上示例将Computer属性重命名为一个新的属性ComputerName

 

3.不支持管道输入

对于不支持管道输入的命令,可以通过圆括号()进行参数传递

get-wmiobject -ComputerName (import-csv .\Computers.csv | select -expandproperty ComputerName) -Class Win32_BIOS

在这里需要注意ComputerName支持的对象类型是String,而import-csv的对象类型是PSCustomObject,在这里需要进行一个类型的转换

ComputerName属性本身的类型就是String,这里通过ExpandPropery可以对属性展开,将原对象中对应的属性拿出来,生成一个String类型的新对象

posted @ 2018-07-13 15:58  问&路  阅读(947)  评论(0编辑  收藏  举报