Board logo

标题: [转载教程] PowerShell运算符之特殊运算符 [打印本页]

作者: CrLf    时间: 2014-7-6 17:14     标题: PowerShell运算符之特殊运算符

关键词

PowerShell运算符之特殊运算符

摘要

PowerShell运算符之特殊运算符
--------------------------------------------------
&,调用运算符。
语法:& <可执行文件路径> [<参数列表>]
举例:
$execPath="D:\Progra~1\FlashFXP\flashfxp.exe"
$execArgs="-upload ftp://u:p@ip:21 "
$execArgs=$execArgs+"-remotepath=`"/`" "
$execArgs=$execArgs+"-localpath=`"d:\123\`" "
& $execPath $execArgs.Split()
这个是之前我们调用flashfxp来上传文件的例子,就是使用&调用符。
PowerShell运算符之特殊运算符

&,调用运算符。
语法:& <可执行文件路径> [<参数列表>]
举例:
$execPath="D:\Progra~1\FlashFXP\flashfxp.exe"
$execArgs="-upload ftp://u:p@ip:21 "
$execArgs=$execArgs+"-remotepath=`"/`" "
$execArgs=$execArgs+"-localpath=`"d:\123\`" "
& $execPath $execArgs.Split()
这个是之前我们调用flashfxp来上传文件的例子,就是使用&调用符。

--------------------------------------------------
点(.),多功能的运算符。
1、调用外部的PS1脚本文件
. D:\PowerShell\test.ps1

2、成员运算符
$对象.属性;或$对象.方法()

3、路径运算符
一个点(.)表示当前目录,两个点(..)表示上级目录。
如:.\test.ps1,..\PowerShell\test.ps1,这两个表达相对于D:\PowerShell\test.ps1来说,都是指的自己。


--------------------------------------------------
两点(..),范围运算符。
这个和上面表示上级目录的两点是完全一样的,只是使用的地方不一样。
“1..5”表示1到5,“5..1”表示5到1。
我们在编程时,使用foreach时可能会乃到类似的用法:
foreach($i in 1..5){
Write-Host $i;
}

--------------------------------------------------
双冒号(::),静态成员运算符。
在PowerShell编程时,经常要用到.NET中的类及其属性和方法。比如Thread.Sleep()方法,要在PowerShell中调用则使用如下的方式来调用。
[System.Threading.Thread]::Sleep(10000);

--------------------------------------------------
(-f),格式化运算符。
语法:格式化字符串 -f 值1,值2,...
举例:"{0} {1:N} {2,-10}" -f 10000,[math]::pi,"good"

--------------------------------------------------
$(),子表达式运算符。
计算括号内的表达式的值,有点像eval()函数。如果值是一个结果就返回标量。如果值是多个,则返回一个数组。
举例:
$i = 200;
#返回值1000
$($i*5);
返回一个逻辑磁盘的对象数组
$(Get-WMIObject win32_LogicalDisk)

--------------------------------------------------
@(),数组子表达式运算符。
通过数组返回一条或多条语句的结果。如果只有一项,则数组只有一个成员。如:
@(Get-WMIObject win32_LogicalDisk)

--------------------------------------------------
逗号(,)数组元素运算符。
此运算符用作二元运算符时,逗号用于创建数组,列出数组的各个元素。如:
$array = "a","b","c","d"
用作一元运算符时,逗号用于创建只含一个成员的数组。如:
$singleArray = ,"a"

--------------------------------------------------
来源地址:PowerShell运算符之特殊运算符:http://www.splaybow.com/post/powershell-operator-special.html
作者: CrLf    时间: 2014-7-6 17:42

本帖最后由 CrLf 于 2014-7-6 19:00 编辑

引申:
像 cmd 里那样直接敲文件名是不能打开当前目录下的非可执行文件/脚本的,假如我要用关联程序打开 a.txt,可以用 cmdlet:
  1. Start-Process a.txt
复制代码
也可以使用调用运算符:
  1. & a.txt
复制代码
也可以指明相对路径或绝对路径:
  1. d:\a.txt #绝对路径
  2. .\a.txt #相对路径
复制代码
--------------------------------------------------------
@() 和 @{} 是不一样的,前者是数组,后者是 hash 表
--------------------------------------------------------
值得一提的是,创建单元素的数组方法有很多,比如:
  1. $a=,'a'
  2. $b=@('a')
  3. $c=@()+'a'
  4. $d=[array]'a'
复制代码
这四个方法用 getType() 看到的属性都是 System.Array,但用 $b|get-member 和 $c|get-member 返回的结果竟然不一样,奇妙的是有些在 $b|get-member 中没提到的方法和属性居然也可以用,不懂是什么原因
作者: terse    时间: 2014-7-6 18:39

引申:
像 cmd 里那样直接敲文件名是不能打开非可执行文件/脚本的,假如我要用关联程序打开 a.txt,可以用 ...

这个带路径可以打开吧 如这样 c:\A.TXT    当前目录  .\a.txt
作者: CrLf    时间: 2014-7-6 18:55

回复 3# terse


嗯,感谢补充,带路径是可以(.\ 应属于相对路径),纯文件名不行
话说我有点看不明白的是,顶楼原文提到 . 能用于调用外部的PS1脚本文件,但不加也可以调用啊:
  1. . d:\test.ps1
  2. d:\test.ps1
  3. #这两者有何区别呢?
复制代码

作者: sysy0018    时间: 2014-7-7 06:52

真是难得给力的帖子啊。
作者: DAIC    时间: 2014-7-7 09:35

回复 4# CrLf


类似于 shell 脚本里面的 source 命令
可以用它调用其它脚本里面的函数、变量等
作者: storm8    时间: 2014-7-7 10:02

学习了
作者: CrLf    时间: 2014-7-7 16:22

回复 6# DAIC


    原来如此,貌似是变量/函数作用域上的区别




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2