1.cmdlet
get-command-CommandTypecmdlet查看所有cmdlet
公共参数:-Verbose,-Debug,-ErrorAction,-ErrorVariable,and-OutVariable.这些参数大多用于一些脚本调试等.
get-helpget-commd
-------------------------------------------------------------
2.函数
function函数名
{
函数体
}
-------------------------------------------------------------
3.脚本
脚本比函数慢,每次都需要编译
-------------------------------------------------------------
4.别名
Get-Command-CommandTypealias
-------------------------------------------------------------
5.脚本调用
powershell“&'绝对路径'参数”
-------------------------------------------------------------
6.变量
特殊字符变量名定义加{}
${$$$$}=1
-------------------------------------------------------------
7.赋值和返回
可以把命令赋值给变量
$item=Get-ChildItem
给多个变量同时赋值
$a=$b=$c=123
交换变量的值
$value1,$value2=$value2,$value1
查看正在使用的变量
lsvariable:(后面有:)
查找变量
lsvariable:value*
验证变量是否存在
Test-Pathvariable:value1
删除变量
delvariable:value1
专用的变量命令
Clear-Variable,Get-Variable,New-Variable,Remove-Variable,Set-Variable
变量写保护
New-Variablenum-Value100-Force-Optionreadonly
但是可以通过删除变量,再重新创建变量更新变量内容
delVariable:\num-Force
Constant常量一旦声明,不可修改
-------------------------------------------------------------
8.自动化变量(环境变量)
Get-Helpabout_Automatic_variables获取所有的环境变量
-------------------------------------------------------------
9.通过函数扩展别名
functiontest-conn{Test-Connection-Count2-ComputerName$args}必须使用变量$args
------------------------------------------------------------
10.循环
foreach
foreach-object用于管道命令
#foreach获取文件每一行信息
$cont=Get-Contentd:\1.txt
foreach($ipin$cont)
{Write-Host$ip}
#foreach-object
Get-Contentd:\1.txt|ForEach-Object{Write-Host$_}
--------------------------------------------------------------
11.条件操作符
-eq:等于
-ne:不等于
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于
-contains:包含
-notcontains:不包含
比较
"A"-ieq"a"-i忽略大小写
"A"-ceq"a"-i不能忽略大小写
求反
-not$a!($a)
布尔运算
and:和
-or:或
-xor:异或
-not:逆
比较数组和集合
-eq匹配数组
-contains验证一个数组是否存在特定元素
-------------------------------------------------------------
12.Where-Object条件过滤
Get-Process|Where-Object{$_.company-like'*Microsoft*'}|
selectName,Description,Company
别名?
-------------------------------------------------------------
13.PowershellForEach-Object循环
Get-WmiObjectWin32_Service|ForEach-Object{"Name:"+$_.DisplayName,",IsProcessIdmorethan100:"+($_.ProcessId-gt100)}
Get-WmiObjectWin32_Service|ForEach-Object{
if($_.ProcessId-gt3000)
{'{0}({1})'-f$_.DisplayName,$_.ProcessID}
}
-------------------------------------------------------------
14.Powershell别名
查询别名所指的真实cmdlet命令
Get-Alias-namels
查看可用的别名
diralias:|where{$_.Definition.Startswith("Remove")}
创建自己的别名
Set-Alias-NameEdit-Valuenotepad
删除自己的别名delalias:Edit
保存自己的别名
``
-------------------------------------------------------------
15.Powershell进行数学运算
常用的加减乘除模(+,-,*,/,%)运算和小括号表达式都支持。
自动识别计算机容量单位,包括KB,MB,GB,TB,PB
-------------------------------------------------------------
16.Powershell快捷键
Esc清空当前命令行
Ctrl+左/右方向键在单词之间移动光标
Ctrl+Home删除光标最左端的所有字符
ALT+F7清除命令的历史记录
F4删除命令行至光标右边指定字符处
-------------------------------------------------------------
17.PowershellDoWhile循环
do-while()会先执行再去判断,能保证循环至少执行一次
单独使用While
continue关键字,可是终止当前循环,跳过continue后其它语句,重新下一次循环
PowershellIF-ELSEIF-ELSE
Switch循环
while(1){
$choose=Read-Host'请选择:'
switch($choose)
{
1{"Beijing"}
2{"Shanghai"}
3{"Tianjin"}
4{"Chongqing"}
}
}
switch($input)
{
{$_-lt10}{"小于10"}
{$_-eq10}{"等于10"}
{$_-gt10}{"大于10"}
}
switch($value)
{
{($_-lt10)-and($_-gt0)}{"小于10"}
10{"等于10"}
{$_-gt10}{"大于10"}
Default{"没有匹配条件"}
}
switch($value)
{
{$_-lt5}{"小于5";break}
{$_-gt0}{"大于0";break}
{$_-lt100}{"小于100";break}
Default{"没有匹配条件"}
}
比较字符串
$domain="www.mossfly.com"
#大小写敏感
switch-case($domain)
{
"Www.moSSfly.com"{"Ok1"}
"www.MOSSFLY.com"{"Ok2"}
"www.mossfly.com"{"Ok3"}
}
#Ok3
通配符
$domain="www.mossfly.com"
#使用通配符
switch-wildcard($domain)
{
"*"{"匹配'*'"}
"*.com"{"匹配*.com"}
"*.*.*"{"匹配*.*.*"}
}
正则表达式
$mail="www@mossfly.com"
#使用通配符
switch-regex($mail)
{
"^www"{"www打头"}
"com$"{"com结尾"}
"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"{"IP地址"}
}
-------------------------------------------------
Powershell执行文件和脚本
执行vbs,批处理文件
fullpath
执行powershell脚本
Powershell调用入口的优先级
别名函数脚本文件
-------------------------------------------------
Powershell执行外部命令
#递归获取%TEMP%中的所有文件
$files=Get-ChildItem-Recurse$Env:TEMP|Where{!$_.PSIsContainer}
foreach($filein$files)
{
#如果是文本文件,则输出文件名与文件大小
if($file.Extension.ToLower()-eq".txt")
{
Write-Host$file.Name$file.Length
}
}