PowerShell入门教程
1. 进入Powershell环境
开始--运行--powershell
开始--运行--cmd--powershell
不同系统内置的powershell系统版本是不一样的
查看版本:$psversiontable
2. powershell功能特别强大
使用方便
命令命名方式简单:动词+名词
>get-service 获取系统服务
>get-help get-service 查看命令的帮助信息
面向对象
绑定了.net开发平台
强大的兼容性,与cmd、vbs可直接调用
扩展性:可管理AD域、虚拟化等产品
3. 自定义powershell控制台
右击标题栏--属性
编辑模式--快捷/普通
4. powershell快捷键
ALT+F7 清除命令的历史记录
Pgup Pgdown 翻页
Enter 执行当前命令
End 光标移至末尾
Del 删除光标后的命令字符
ESC 清空当前命令行
F2 自动补充历史命令至指定位置
F4 删除命令行至光标右边指定的字符处
F7 对话框显示命令行历史记录
F8 检索包含指定字符的命令行历史记录
F9 根据编号选择历史命令
上/下 翻看历史命令
左/右 左右移动光标
Home 移至命令行最左端
Backspace 从右侧删除命令行字符
CTRL+C 取消命令执行
Tab 自动补齐命令或文件名
5. 管道和重定向
>ls | Format-Table mode,name
>ls | Format-Table mode,name > 1.txt
>ls | Format-Table mode,name >> 1.txt
>type 1.txt
6. Powershell数学运算符
+ - * / %
7. 执行外部命令
.\ipconfig
.\netstat -na
.\notepad
命令程序必须在system 32目录中
如果命令程序不在目录中,需要将文件复制到目录中或修改环境变量
查看系统变量:$env:Path
添加环境变量:$env:path=$env:path+“目录名称” ----临时生效
图形化设置环境变量 ----永久生效
8. Powershell命令集
查看命令集:get-command
命令类型:Alias 别名
Function 函数
Cmdlet 内部命令
powershell命令是cmd命令的扩展,一般情况下,cmd命令在powershell中是可以使用
查看命令的帮助信息:get-help get-command
查看系统进程:get-process
查看当前会话的别名:get-alias
查看历史命令:get-history
查看日期:get-date
9. Powershell别名使用
get-help get-command
get-childitem命令的别名 dir ls 显示文件
get-alias -name ls 查看是谁的别名
查询以remove开头的别名
Get-Alias | where {$_.definition.startswith("Remove")}
对分组显示的所有别名按个数以降序进行排列
Get-Alias | Group-Object Definition |sort -Descending Count
10. 自定义别名
自定义别名:set-alias -name pad -value .\notepad
删除别名:del alias:pad
导出别名:export-alias demo.ps1
强制导入别名:import-alias -force demo.ps1
11. 变量
定义变量:$name="xiaoming"
$age=25
输出变量:$name
变量对大定是不区分的:$a和$A是同一个变量
定义特殊名称的变量:${i am a”()}=100
定义变量时可以跟表达式:$n=(7*6+8)/2
也可以跟命令:$n=ls
同时给多个变量赋值:$sum1=$sum2=200
12. 变量的操作
改变变量的值:$sum1=10
$sum2=20
$temp=$sum1
$sum1=$sum2
$sum2=$temp
$sum1,$sum2
查看当前使用的变量有哪些:ls variable:
查看指定的变量:ls variable:su*
查看变量是否存在:test-path variable:sum1
删除变量:del variable:sum1
Remove-Variable sum2
13. 自动变量(启动时会自加载,只能读不能改)
$home 当前用户根目录
$pid 当前进程号
$ 上一个命令
$? 上一个命令是否执行成功
$null 空变量
14. 环境变量
查看环境变量:ls env:
ls env:os
$env:name="xiaoming" 添加环境变量
$env:JAVA_HOME="C:\Program Files\Java\jdk1.8.0_66"
del env:name 删除环境变量
[environment]::setenvironment variable("PATH";"d:\";"user") 修改
[environment]::getenvironment variable("PATH";"d:\";) 显示
15. 脚本执行策略的设置
(1)写一个.bat的脚本程序
echo hello world!!
(2)写一个.ps1的脚本程序
$sum=46
Switch($sum)
{
{$_ -lt 50 -and $_ -gt 40} {"此?数簓小?于?0大洙?于?0"}
{$_ -eq 50} {"此?数簓等台?于?0"}
{$_ -gt 50} {"此?数簓大洙?于?0"}
}
16. 与其他脚本的相互调用
(1)在cmd中运行powershell脚本
C:\Users\ASUS-PC\Desktop>powershell .\demo.ps1
(2)如何Powershell中运行.bat脚本
查看策略:Get-ExecutionPolicy
Restricted 禁止
Get-help set-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned 允许策略
C:\Users\ASUS-PC\Desktop>.\demo.bat
(3)如何在powershell中运行vbs脚本
将vbs脚本拖拽到powershell环境中
17. 条件操作符
算术运算符:-eq -nq -gt -lt -contains -notcontains
89 -eq 99
1gb -gt 1mb
(1,2,3) -contains 1
(1,2,3) -notcontains 1
逻辑运算符:-and -or -not
1,5,9,0 -ne 0 不显示等于0的数字
1,5,9,0 -eq 0 显示等于0的数字
1,5,9,0 -contains 0 判断是否包含0
18. 条件判断:if语句
$num=200
if ($num -gt 90) {"此?数簓大洙?于?0"}
if ($num -lt 90) {"此?数簓小?于?0"}
if ($num -eq 100) {"此?数簓等台?于?00"}
修改为:
$num=80
if ($num -gt 90) {"1"} elseif ($num -lt 90) {"0"} else {90}
19. 条件判断:swith语句
举例1:
$sum=56
Switch($sum)
{
{$_ -lt 50} {"此数小于50"}
{$_ -eq 50} {"此数等于50"} 或 50 {"此数等于50"}
{$_ -gt 50} {"此数大于50"}
}
举例2:
$sum=56
Switch($sum)
{
{$_ -lt 50 -and $_ -gt 40} {"此数小于50大于40"}
{$_ -eq 50} {"此数等于50"}
{$_ -gt 50} {"此数大于50"}
}
20. 循环语句:foreach语句
$arr=1..10
foreach ($n in $arr)
{
$n*$n/2
}
21. 循环语句:while语句
$num=15
while ($num -gt 10)
{
$num
$num=$num-1
}
$num=15
do
{
$num
$num=$num-1
}
while($num -gt 10)
22. Break(跳出整个循环,不再执行)和continue(只跳出满足条件的循环)关键字使用
$num=1
while ($num -lt 10)
{
if ($num -eq 4)
{
break
}
else
{
$num
$num++
}
$num=1
while ($num -lt 6)
{
if ($num -eq 4)
{
$num++
continue
}
else
{
$num
$num++
}
}
23. 循环语句:for语句
$num=0
for ($i=1;$i -le 100;$i++)
{
$num=$num+$i
}
$num
24. 循环语句:switch语句
$num=1..100
Switch ($num)
{
{($_%2) -eq 0} {"(辍?$_)?偶?数簓"}
{($_%2) -eq 1} {"($_)奇?数簓"}
}
25. 数组的创建
$arr=1..10
$arr.GetType()
$arr
26. 访问数组
$arr+="AA" 增加元素到数组
$arr[] 通过索引读取元素
$arr.Count 统计元素个数
$arr 显示数据中的元素
27. 自定义函数及调用
(1)不指定参数
function myping
{
ping http://www.baidu.com
}
myping
(2)传递参数
function myping($site)
{
ping $site
}
myping http://www.baidu.com
function myping($name,$age)
{
$content="I am $name,and I am $age years old!"
write-host $content
}
myping "xiaoming" 25
28. powershell函数返回值
function add($num1,$num2)
{
$sum=$num1+$num2
return $sum
}
add 3 4
查看返回值类型
function add($num1,$num2)
{
$sum=$num1+$num2
$sum.GetType().fullname
return $sum
}
add 3.1 4
返回多个参数的返回值类型
function add($num1,$num2,$sum3)
{
$value=$num1,$num2,$sum3
$value.GetType().fullname
$value[2]
}
add 3 4 9
29. powershell定义文本
打印一句话: 'hello world'
打印一句话带变量: "hello world! $(Get-Date)"
支持表达式:"hello world! $(5*9)"
单引号: '“hello world!” $(5*9)'
转义字符: "hello world!`"$(5*9)`" "
`n 换行符
`r 回车符
`t 制表符
`b 退格符
30. powershell实现用户交互
$input=read-host "请输入你的姓名:"
"你好,你输入的姓名是:$input"
31. powershell格式化字符串
$name="xiaoming"
$age=25
$body="strong"
"my name is $name,i am $age years old,and my body is $body"
name="xiaoming"
$age=25
$body="strong"
"my name is {0},i am {1} years old,and my body is {2}" -f $name,$age,$body
"my name is {0},i am {1} years old,and my body is {2},{3}" -f $name,$age,$body,(3*6)
32. String对象方法
分隔字符串
$str="c:\windows\system32\demo.txt"
$str.Split("\") 分隔字符
$str.Split("\").GetType() 查看类型
$str[0,1] 数组索引
$str.EndsWith("txt") 是否以txt结尾
$str.cont("txt") 是否包含txt字符串
$str.CompareTo("xxy") 字符串是否相等
$str.indexof("w") 字符w的位置
$str.Insert(3,"xxxx") 插入字符
$str.Replace("c","88888") 替换