ByValue

以Get-Service命令为例,它的帮助文件中关于-Name参数是这样解释的:

1. "WinRM" | Get-Service

2. "TrustedInstaller","BITS","WinRM" | Get-Service

3. Get-Content services.txt | Get-Service

以上的命令比 Get-Content services.txt | ForEach-Object { Get-Service -Name $_ } 简单明了很多.

那么你要问了,管道符号前面只有一个值,Get-Service命令后面却有很多参数,它怎么知道把前面的值传给后面的哪个参数呢?决定因素就在于位置参数Position:0,这表示-Name参数的优先级最高,管道传过来的值就给这个参数。

ByPropertyName (ByProperty'sName)

还是以Get-Service为例,我们先创建一个自定义对象:

$list = [PSCustomObject]@{ 'computername' = 'server1'}, [PSCustomObject]@{'computername' = 'server2' }  #这里一共2个对象;效果和Import-CSV一样

$list | Get-Service  #报错。因为-Name是位置参数,你不指定参数时系统就默认为你想将变量list的内容传递给-Name,但却因为不存在叫做类似“server1”这样的服务名而导致传递失败,于是就报错了。但是我们用一个小技巧即可解决这个问题

$list | Get-Service -Name *  #先显式指定-Name参数的值,不让它接收管道传来的值,于是系统转而将值传递给-ComputerName

接下来以New-ADUser为例,假如你从HR拿到了一份新员工列表:

你需要为他们创建域账号,显而易见,你不能直接导入这份表格,因为AD中的User可没有这些中文的属性名,怎么办?让Powershell的哈希表来转换:

$userlist | Select -Property @{name="displayName";expression={$_.姓名}}, @{name="SamAccountName";expression={$_.登录名}} | New-ADUser  #该命令不完整,重点是中间那段Property Name的转换

这样做的目的就是为了让列表中的值以ByPropertyName的方式传递给New-ADUser命令,只有属性名(displayName,SamAccountName)一样才能传递。

再用Get-Content举一个例子,Get-Content一共有6个支持且只支持ByPropertyName的参数,我选择其中两个-Path和-Tail,然后用下面的命令将内容通过管道进行传递:

[PSCustomObject]@{'Path'='C:\Windows\WindowsUpdate.log'; 'Tail'=10} | Get-Content

这个例子很好的说明了ByPropertyName这种方式“会将管道左边每个匹配的属性名称与管道右边的命令所允许接受的参数进行关联”。

系统会优先使用byValue方法,仅当byValue方法无法执行时才会尝试使用byPropertyName方法。

http://windowsitpro.com/blog/pipeline-parameter-binding-byvalue

http://windowsitpro.com/blog/pipeline-parameter-binding-bypropertyname

最新文章

  1. [LeetCode] Count of Smaller Numbers After Self 计算后面较小数字的个数
  2. T-SQL Recipes之Database Backups
  3. java性能调优工具
  4. Ghost博客安装
  5. 图像卷积、相关以及在MATLAB中的操作
  6. BZOJ4519: [Cqoi2016]不同的最小割
  7. sudo 使用不了, the permissions on the /etc/sudoers file are changed to something other than 0440
  8. 【转】Linux时间函数之gettimeofday()函数之使用方法
  9. 什么是umbraco
  10. 面试中有关C++的若干问题
  11. Python学习--17 访问数据库
  12. RAMCloud:内存云存储的内存分配机制
  13. 别再说Python没有枚举类型了,好好看看
  14. Mybatis五(一级二级缓存、第三方缓存)
  15. 手把手在MyEclipse中搭建Hibernate开发环境
  16. Java之构造器和构造方法的使用和意义
  17. mysql8安装成功后忘记密码
  18. Mahout实战---评估推荐程序
  19. python基础-类的其他方法
  20. Hive中order by,sort by,distribute by,cluster by的区别

热门文章

  1. 使用Python代码处理Excel
  2. 一个java程序员该具备的工具
  3. maven 打 fatjar
  4. opencv-Getting Started with Videos
  5. restful_framework之APIView
  6. STM8S——Clock control(CLK)
  7. 聊聊Http协议
  8. Python学习过程笔记整理(一)
  9. JUC——并发集合类
  10. Java 的JAR包、EAR包、WAR包区别