条件判断
比较运算符
- -eq :等于
- -ne :不等于
- -gt :大于
- -ge :大于等于
- -lt :小于
- -le :小于等于
- -contains :包含
- -notcontains :不包含
-eq,-ne可用于过滤数组,如下
Posh> 1,2,3,4,3,2,1 -ne 3
1
2
4
2
1
布尔运算符
- -and :和
- -or :或
- -xor :异或
- -not :求反
Where-Object条件过滤
Where-Object(别名?
)用于对管道的条件过滤,如Get-Service | ? {$_.Name -like "B*"}
if语句
if(条件){...} else {...},如if($n -lt 0 ){"-1" } elseif($n -eq 0){"0"} else {"1"}
switch语句
switch($value)
{
1 {"Beijing"}
2 {"Shanghai"}
3 {"Tianjin"}
4 {"Chongqing"}
}
#------------------------------
$value=18
switch($value)
{
{$_ -lt 10} {"小于10"}
10 {"等于10"}
{$_ -gt 10} {"大于10"}
Default {"没有匹配条件"}
}
#------------------------------
$domain="www.mossfly.com"
switch($domain)
{
"Www.moSSfly.com" {"Ok 1"}
"www.MOSSFLY.com" {"Ok 2" }
"WWW.mossfly.COM" {"Ok 3"}
}
#-case 大小写敏感
$domain="www.mossfly.com"
switch -case ($domain)
{
"Www.moSSfly.com" {"Ok 1"}
"www.MOSSFLY.com" {"Ok 2" }
"www.mossfly.com" {"Ok 3"}
}
#-wildcard 使用通配符
$domain="www.mossfly.com"
switch -wildcard($domain)
{
"*" {"匹配'*'"}
"*.com" {"匹配*.com" }
"*.*.*" {"匹配*.*.*"}
}
#-regex 使用正则表达式
$mail="www@mossfly.com"
switch -regex ($mail)
{
"^www" {"www打头"}
"com$" {"com结尾" }
"d{1,3}.d{1,3}.d{1,3}.d{1,3}" {"IP地址"}
}
循环
ForEach-Object
使用ForEach-Object,$_ 代表当前对象
Get-WmiObject Win32_Service | ForEach-Object {
if ($_.ProcessId -gt 3000)
{ "{0}({1})" -f $_.DisplayName,$_.ProcessID}
}
ForEach
ForEach($file in dir c:\windows)
{
if($file.Length -gt 1mb)
{
$File.Name
}
}
函数
定义和删除函数
- 定义函数
Function FuncName (args[]){code;}
- 利用函数定制命令别名(参数内置)
Function myPing { PING.EXE -n 1 $args }
- 利用虚拟驱动删除函数
del Function:myPing
函数参数
- 内置参数
$args
数组
function sayHello
{
if($args.Count -eq 0){
"No argument!"
}
else{
$args | foreach {"Hello,$($_)"}
}
}
#--------------------------------------
function Add
{
$sum=0
$args | foreach {$sum=$sum+$_}
$sum
}
- 设置参数名称并定义默认值
function stringContact($str1="moss",$str2="fly")
{
return $str1+$str2
}
函数返回值
Posh会将函数中所有的输出作为返回值,但是也可以通过return语句指定具体返回值,return 语句将指定的值返回的同时,会中断函数的执行,其后语句不再执行。
function test($num)
{
1
9
return 10
4
6
}
#调用该函数会返回 1 9 10