Powershell实战之管道参数绑定

本文介绍了PowerShell中管道参数的两种传递方式:ByValue和ByPropertyName,并详细解释了如何使用这两种方式。此外,还说明了如何处理不支持管道输入的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  管道参数通过两种方式传递: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类型的新对象

转载于:https://www.cnblogs.com/mowl/p/9305465.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值