·What is PowerShell?
提供了命令行界面的互动式Shell环境和脚本语,以协助管理员执行弹性化、自动化的工作。
·环境依赖基于
.NET FrameWork
·PowerShell Cmdlets
· Command lets [动词-名词]
· 用.NET语言所写成的指令,每个Cmdlets只具单 任务,而Cmdlets与Cmdlets通过管道符链接结合就可以协作出复杂的功能工作
· Get-Command 显示可用的Cmdlets
· CLI中的主要命令
- Shell Function(CLI可用代码)
- Powershell Scripts(.ps1)
- Native commands(.exe,.bat,etc.)
·Pipelines - 管道
· 用于从一个Cmdlets向另一个Cmdlets传递数据
· 提供了一个创建简单命令行代码脚本的机制
· 实现并发执行
· 为了便于阅读,可以分为多行
·PowerShell中的操作技巧
· Aliases 别称
- Cmdlet的缩写或者昵称
- Transitional alias
- 类似曾经用过的命令- dir,copy,ls,cat
- 可以自定义别称方便使用
· Convenience alias
- Cmdlet的缩写
- get-command = gcm,get-wmiobject = gwmi
·PowerShell 中的脚本执行
·使用Set-ExecutionPolicy更改
·改变PS的执行策略
- Restricted,默认设置,不允许运行任何脚本
- AllSigned,仅运行受信任脚本
- RemoteSigned,运行本地脚本,不管这些脚本是否受信任;
如果是从Internet下载的脚本,则必须是受信任的脚本才能够运行。
- Unrestricted,允许运行所有脚本,甚至是不受信任的脚本
·DEMO
·自定义别称、更改执行策略
set-Alias gps Get-process
Get-Command [获取当前可以使用的所有cmdlet命令]
Get-Process [获取当前系统所有的进程]
Get-Process | where ($_.CPU -gt 20)
gps | sort cpu -Descending(使用管道链接并行执行)
demo.ps1 (使用脚本文件的方式执行)
·PS中的变量定义、使用
· 不需要定义或声明数据类型
· 在变量前加“$”
· 定义变量的规则
- 变量可以是数字 $618
- 变量可以是字符串 $0xW
- 变量可以是特殊字符${@0xW}
· 内置的变量
- $pshome
- $home
- $profile
·强大的帮助系统
· get-help,help or ?
· 可以使用通配符获取选项列表
-get-help get-*
-get-help *service*
·DEMO
$var = 0618
$var = "silvers"
$var = "0xW"
$var1 = "_Silvers"
$var2 = "$var $var1"
$var3 = '$var $var1' (输出结果为[$var $var1]''会被当成字符串来处理)
Get-Date (获取当前系统的日期时间)
$data = Get-Date
$data.AddDays(5)(输出结果为当前时间后推5天)
Get-Help get-Command
Get-Help get-Command |more (逐行输出)
Get-Help get-Command -detailed/full (全部的详细信息)
Get-Help Get-Process -full
Get-Process | Sort-Object ws
· 使用管道符链接命令的方式执行
Get-Process |
sort ws |
fl (fl是format list命令的缩写)
·属性和方法
· 使用get-member方法来获取属性和方法的详细列表
· $var = 618; $var | get-member
$var = "silvers"; $var | get-member
· 使用TAB键来选择变量的属性和方法
例:$var.[TAB]
·语法和操作
· 引号的使用,单引号和双引号的区别
单引号里的是字符串;双引号里的是引用变量
· 定向输出。使用“>”符号定向输出
· 变量的注释。使用“#”符号编写注释
· 优先运算符
· 丰富的语法
-eq;-ne;-gt;-ge;-lt;-le;-like;
-notlike;-contains;-notcontains
· 支持算术运算符
+;*;-;/;=;+=;-=;*=;/=;%=
· 支持逻辑运算符
-and;-or;-xor;-not;-is;-isnot;-as
·变量和数据类型
·变量间的操作
变量之间可以进行乘法
·变量的强制类型转换
·Set-variable,new-variable,clear-variable和remove-rariable的使用
变量的声明、创建、删除、清除等
·变量的4中模式:
local,script,global,private
变量的作用域
·数组、安全、Whatif
· 数组的定义及使用方法
- $var = 1..10
- $var +=12,43
· 创建受信任的安全脚本
使用makecert.exe创建受信任的安全脚本
· 使用-Whatif预览执行结果
·循环、判断语句
· 循环语句
- Foreach/for
- While
- Do while
- Do until
· 判断语句
- If
- switch
· 循环控制语句
- Break
- continue
·循环语句
· Foreach
- 集合的操作
- 每个对象都进行操作
- Foreach是foreach-object的昵称
- 使用foreach的同时,我们已经默认定义了$n,$i两个变量,$n用与存放foreach运行的次数,$i用于存放每次foreach运行的结果
· For
- 与foreach相似
while,do while,do until,if,switch,break,continue
· While
当条件成立时,执行操作
· Do while
- 操作至少执行一次
· Do until
- 操作至少执行一次
- 当条件不成立时,结束执行
· If/switch
- If与else、elseif使用。不需要then/end if
- Switch与select case相似
· Break:匹配时跳出循环
continue:调回循环起始位置
·格式的限定
· 使用format限定操作结果的显示格式
· Format的4种显示格式
- Format-list (fl)
- Format-table(ft)
- Format-wide (fw)
- Format-custom(fc)
· 在命令结尾使用 -format来限定结果的显示格式
·文件的导出、函数的定义
· 使用导出命令将结果导出至指定文件
- 支持CSV
- 支持XML
- 支持HTML
· 导入文件同样被支持
- 可以支持CSV文件导入
- 可以支持XML文件导入
·错误调试
· 确定错误
- 使用$?测试命令执行成功or失败
- 使用$erroractionpreference设置错误执行模式
·Continue
·Stop
·slientlycontinue
· 解决错误
- Trap
调试特殊错误
确定错误响应(continue、break)
- -ea
定义当错误发生以后,如何继续执行
·脚本调试
· 使用set-psdebug进行调试
- 激活set-psdebug功能
- 控制追踪等级
- 脚本逐步执行
·DEMO 演示
$ver = 123
$ver | get-member
get-process >d:\gps.txt
$var ="0xW" # This is String
$var *4
$var2 += $var*2
$var -like -like "xw" (False)
$var -notlike "xw" (True)
$var1 = 10
function one{"the variabale is $var1"}
function two{$var1=20,one}
export-Clixml d:\demo.xml(导出)
import-Clixml d:\demo.xml (导入)
=====以下来自网路博客为验证测试,估计现在不这样用了吧Windows powershell官方网站
·使用Makecert.exe创建信任脚本
· 使用Makecert命令创建信任证书
makecert -n "CN=MyRoot" -a sha1-eku1.3.6.1.5.5.7.3.3 -r-sv root.pvk
root.cer--ss Root -sr localMechine
· 创建信任证书
makecert -pe-n "CN=MyCertificate"-ss MY -a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv
root.pvk -c root.cer
· 将存在的.ps1脚本进行信任签名
Set-AuthenticodeSignature D:myscript ps1 $cert
·使用Makecert.exe创建信任脚本
· 核实此安装过程:gci cert:\CurrentUser\my -codesigning
· 使用$cert = @(gci cert:\currentuser\my -codesigning)[0]检索首次安装的代码签名证书(如果安装了多个证书并希望使用第一个意外的其他证书,只需将"0"改为相应的数字即可)。
· 使用Set-AuthenticodeSignature myscript.ps1 $cert签名文件
· 打开脚本文件观察变化
·Makecert的参数
· 选项 ·说明
-n x509name 指定主题的证书名称。此名称必须符合x_500标准。最简单的方法是在双引号中指定此名称,并加上前缀CN=;例如,"CN=myName".
-p 将所生成的私钥标记为可导出。这样可将私钥包括在证书中。
-sk keyname 指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。
-sr location 指定主题的证书存储位置。location可以是默认值或者location
-ss store 指定主题的证书存储名称,输出证书即存储在那里。
-# number 指定一个介于1和2,147,483,647之间的序列号。默认值是由Makecert.exe生成的唯一值。
-$ authority 指定证书的签名权限,必须设置为comanendal(对于商业软件发行者使用的证书)或者imdivalhousal(对于个人软件发行者使用的证书)。
-? 显示此工具的命令语法和基本选项列表
-! 显示此工具的命令和扩展选项列表。
·Makecert的参数(扩展)
·选项 ·说明
-a algorithm 指定签名算法。必须是md5(默认值)或sha1.
-b mm/dd/yy 指定有效的开始时间。默认为证书的创建日期。
-cy certType 指定证书类型。有效值是end(对于最终实体)和authority(对于证书颁发机构)。
-d name 显示主题的名称
-eku oid[,oid] 将用逗号分割的增强性密钥用法对象标识符(OID)列表插入到证书中。
-h number 指定此证书下面的树的最大高度。
-ic file 指定颁发者的密钥容器名称
-ik keyName 指定颁发者的密钥类型,必须是signalure,exchange或一个表示提供程序类型的整数。默认情况下,可传入1表示交换密钥,传入2表示签名密钥。
-in name 指定颁发者的证书名称。
·使用PowerShell管理IIS
· 前提:IIS xx PowerShell Provider
· 创建Web站点
New-Item iis:\Sites\TestSite.bindings
@{protocol="http";bindingInformation=".80:TestSite"} -physicalPath
c:\test
· 创建Web应用程序
New-Item 'IIS:\Sites\Default Web Site\DemoApp'-physicalPath
c:\test-type Application
·使用PowerShell管理IIS
· 改变、查看站点和应用程序池状态
Stop-WebItem, Start-WebItem、Get-WebItemState
· 回收应用程序池
- 请求默认页
- 获取进程的ID(PID)
- 回收应用程序池