ByValue和ByPropertyName的区别
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
ByValue和ByPropertyName的区别的更多相关文章
- iOS开发UI篇—核心动画(基础动画)
转自:http://www.cnblogs.com/wendingding/p/3801157.html 文顶顶 最怕你一生碌碌无为 还安慰自己平凡可贵 iOS开发UI篇—核心动画(基础动画) iOS ...
- CABasicAnimation精讲
前言 本教程写了这个效果图的demo,同时总结CABasicAnimation的使用方法. 看完gif动画完,看到了什么?平移.旋转.缩放.闪烁.路径动画. 实现平移动画 实现平移动画,我们可以通过t ...
- ios核心动画(基础动画)
一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为du ...
- IOS Animation-CABasicAnimation、CAKeyframeAnimation详解&区别&联系
1.先看看网上流传的他们的继承图: 从上面可以看出CABasicAnimation与CAKeyframeAnimation都继承于CAPropertyAnimation.而CAPropertyAnim ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- 【原】nodejs全局安装和本地安装的区别
来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...
- 探究@property申明对象属性时copy与strong的区别
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...
- X86和X86_64和X64有什么区别?
x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为&qu ...
随机推荐
- doc2vec使用笔记
#!/usr/bin/env Python # coding:utf-8 #improt依赖包 # import sys # reload(sys) # sys.setdefaultencoding( ...
- Python爬虫入门 之 如何在豆瓣中获取自己喜欢的TOP N电影信息
什么是爬虫 按照一定规则自动的获取互联网上的信息(如何快速有效的利用互联网上的大量信息) 爬虫的应用 搜索引擎(Google.百度.Bing等搜索引擎,辅助人们检索信息) 股票软件(爬取股票数据,帮助 ...
- 关于AutoMapper和WCF的一些认识
现在互联网时代呈尚快速开发,快速迭代.伴随着必然产生一些好用的第三方工具,今天有幸看到了Automapper这种类似ORM的框架,但是跟ORM还不太一样, ORM是实体和数据库表之间的映射,而此框架主 ...
- 百度ueditor 文本框
所需配置(qui框架) <!--ueEditor编辑器start--> <script> window.UEDITOR_HOME_URL = ctx+"/stati ...
- 行为事件(ActionChains)源码详解
ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互. 这对于做更复杂的动作非常有用,比如悬停 ...
- JUC——线程池
线程池本质的概念就是一堆线程一起完成一件事情. Executor package java.util.concurrent; public interface Executor { void exec ...
- [转载]使用mpvue搭建一个初始小程序
1. 初始化一个 mpvue 项目 现代前端开发框架和环境都是需要 Node.js 的,如果没有的话,请先下载 nodejs 并安装. 然后打开命令行工具: # 1. 先检查下 Node.js 是否安 ...
- 微信小程序video视频组件
支持mp4和m3u8的视频格式,其中mp4的需要是h264的视频编码 .1.如果您使用video组件是mp4的但不能播放,大部分是由于编码的问题,当然排除文件不存在等这些客观的因素条件.2.如果使用m ...
- GitHub笔记(五)——忽略文件、配置别名、搭建服务器
六.忽略文件 忽略某些文件时,需要编写.gitignore: .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理! 忽略文件的原则是: 忽略操作系统自动生成的文件,比 ...
- 初学node.js-nodejs安装运行(1)
1.Node.js中文官网http://nodejs.cn/download/下载node.js 学习node.js需要有javascript基础,没有基础的可以在http://www.w3schoo ...