2023年8月2日发(作者:)
PowerShell基本语法及常⽤命令PowerShell常⽤命令:⼀ Get类-Command : 得到所有PowerShell命令,获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。 包括Cmdlet、Alias、Function。-Process : 获取所有进程-Help : 显⽰有关 Windows PowerShell 命令和概念的信息-History : 获取在当前会话中输⼊的命令的列表-Job : 获取在当前会话中运⾏的 Windows PowerShell 后台作业-FormatData : 获取当前会话中的格式数据-Event : 获取事件队列中的事件-Alias : 获取当前会话的别名-Culture :获取操作系统中设置的当前区域性10. Get-Date :获取当前⽇期和时间11. Get-Host : 获取表⽰当前主机程序的对象-Member : 获取对象的属性和⽅法。 如:$var = 3 $var | get-member 结果:TypeName: 32 Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo( value), int CompareTo(int value)
Equals Method bool Equals( obj), bool Equals(int obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method de GetTypeCode()
ToString Method string ToString(), string ToString(string format), string ToString(-Random : 从集合中获取随机数或随机选择对象-UICulture : 获取操作系统中当前⽤户界⾯ (UI) 区域性设置-Unique : 从排序列表返回唯⼀项⽬-Variable :获取当前控制台中的变量-EventLog : 获取本地或远程计算机上的事件⽇志或事件⽇志列表中的事件-ChildItem : 获取⼀个或多个指定位置中的项和⼦项-Content : 获取指定位置的项的内容-ItemProperty :获取指定项的属性-WmiObject : 获取 Windows Management Instrumentation (WMI) 类的实例或可⽤类的相关信息-Location :获取当前⼯作位置的相关信息(如:F:UsersTaoMin )-PSDrive:获取当前会话中的 Windows PowerShell 驱动器-Item:获取位于指定位置的项-Process :获取在本地计算机或远程计算机上运⾏的进程-Service : 获取本地或远程计算机上的服务-Transaction :获取当前(活动)事务-ExecutionPolicy :获取当前会话中的执⾏策略⼆.Set类 (set类命令⼀般都含有参数)-Alias : 在当前 Windows PowerShell 会话中为 cmdlet 或其他命令元素创建或更改别名(替代名称) 如:如:Set-Alias aaa -PSDebug :打开和关闭脚本调试功能,设置跟踪级别并切换 strict 模式-StrictMode :建⽴和强制执⾏表达式、脚本和脚本块中的编码规则-Date :将计算机上的系统时间更改为指定的时间-Variable :设置变量的值,如果该变量还不存在,则创建该变量-PSBreakpoint :在⾏、命令或者变量上设置断点-Location :将当前⼯作位置设置为指定的位置-Item :将项的值更改为命令中指定的值-Service :启动、停⽌和挂起服务并更改服务的属性-Content :在项中写⼊内容或⽤新内容替换其中的内容-ItemProperty :创建或更改某⼀项的属性值-WmiInstance :创建或更新现有 Windows Management Instrumentation (WMI) 类的实例-ExecutionPolicy :更改 Windows PowerShell 执⾏策略的⽤户⾸选项。三.Write类-Host : 将⾃定义输出内容写⼊主机。类似于.net的 write()或者writeline()功能-Progress :在 Windows PowerShell 命令窗⼝内显⽰进度栏-Debug :将调试消息写⼊控制台-Verbose:将⽂本写⼊详细消息流-Warning :写⼊警告消息-Error : 将对象写⼊错误流-Output : 将指定对象发送到管道中的下⼀个命令;如果该命令是管道中的最后⼀个命令,则在控制台上显⽰这些对象-EventLog :将事件写⼊事件⽇志PowerShell变量、常量、数组:⼀、变量PowerShell的变量⽆需预定义,可直接使⽤。当使⽤⼀个变量时,该变量被⾃动声明。变量以
$ 符号开头。如:$aPowerShell普通变量:1.给变量赋值:⽅式⼀:$a = "This is a string"$b = 123$c = 0.125⽅式⼆:Set-Variable var 100Set-Variable var1 ”test“Set-Variable va2 8002.获取变量值get-variable var #获取单个变量值get-variable var* #获取多个变量值3.清空变量值clear-variable var4.删除变量remove-variable var5.连接两个字符串变量$a = "This is the 1st string"$b = "This is the 2nd string"a + " and " + $b$c结果:This is the 1st string and This is the 2nd string6.变量的⽅法$date = Get-Date #获取当前时间$s(3) #当前时间加三天PowerShell特殊变量:PowerShell的特殊变量由系统⾃动创建。⽤户⾃定义的变量名称应该不和特殊变量相同。$^ :前⼀命令⾏的第⼀个标记$$ :前⼀命令⾏的最后⼀个标记$_ :表⽰表⽰当前循环的迭代变量。$? :前⼀命令执⾏状态,成功(Ture) 或者 失败(False)$Args :为脚本或者函数指定的参数$Error :错误发⽣时,错误对象存储于变量 $Error 中$Foreach :引⽤foreach循环中的枚举器$Home :⽤户的主⽬录$Host :引⽤宿主 POWERSHELL 语⾔的应⽤程序$Input :通过管道传递给脚本的对象的枚举器$LastExitCode :上⼀程序或脚本的退出代码$Matches : 使⽤ –match 运算符找到的匹配项的哈希表$PSHome :Windows PowerShell 的安装位置$profile :标准配置⽂件(可能不存在)$StackTrace : Windows PowerShell 捕获的上⼀异常$Switch :switch 语句中的枚举器强制指定变量类型:⼀般不需要为PowerShell的变量指定类型。但是也可以强制指定变量类型。如:[int] $b = 5 则此变量只能包含整数值,如果包含其他类型会出错。 如 [int] $b = "aaaa" 就会报错常见变量类型如下: [int] 、[long]、[string] 、[char] 、[bool] 、[byte] 、[double] 、[decimal] 、[single] [array] :数组对象 [xml] :XML对象 [hashtable] :哈希表对象,类似于⼀个字典对象⼆、常量 PowerShell常量的值永远不会变。常量不能被删除。 使⽤常量之前,需要通过Set-Variable来创建常量,且指定⼀些参数来使它等于某个常量。 当使⽤常量的时候,必须⽤$开头。但是,使⽤Set-Variable定义常量时,不可⽤$符号开头。 例如: $aryComputers = "loopback", "localhost" #数组变量 Set-Variable -name intDriveType -value 3 -option constant #常量定义 常量:intDriveType 值:3 foreach ($strComputer in $aryComputers) #循环遍历数组对象 {"Hard drives on: " + $strComputer #获取wmi对象 分类:win32_logicaldisk 电脑名称:$strComputer 源⾃数组对象 电脑过滤条件:drivetype = 3 ,驱动器类型为3 Get-WmiObject -class win32_logicaldisk -computername $strComputer|
Where {$_.drivetype -eq $intDriveType}}三、数组 PowerShell中创建数组的⽅式⾮常简单: $arrName = "LOGONSERVER","HOMEPATH", "APPDATA","HOMEDRIVE" 和创建变量⽅式⼀样,只是赋值时可以付多个值。 使⽤数组⽅式:$arrName[0] :表⽰数组中第⼀个数组项的值 数组从0开始PowerShell注释⽤法: 注释符号:# ⽤法如下(⼀般在.ps1脚本⽂件中使⽤): Get-Process #此处写注释 sort wsPowerShell运算符⽤法:运算符如下:1.算术⼆元运算符: + 加、串联 - 减 * 乘 / 除 % 模2.赋值运算符 = += -= *= /= %=3.逻辑运算符 ! 不等于 not ⾮ and 且 or 或4.⽐较运算符(可在运算符前加上 i 或者 c ,以指定是否区分⼤⼩写) -eq 等于 -ceq 区分⼤⼩写 -ne 不等于 -gt ⼤于 -ge ⼤于等于 -lt ⼩于 -le ⼩于等于 -contains 包含
⽤法如下: 此数组中是否包含3: 1,2,3,5,3,2 –contains 3 返回所有等于3的元素: 1,2,3,5,3,2 –eq 3 返回所有⼩于3的元素: 1,2,3,5,3,2 –lt 3 测试 2 是否存在于集合中: if (1, 3, 5 –contains 2)5.调⽤运算符 & 可⽤于调⽤脚本块或者命令/函数的名称
⽤法如下: $a = { Get-Process | Select -First 2} #获取处理器信息排名前⼆的两条记录 &$a . 可⽤于⽅法调⽤ ⽤法如下: $a = "这是字符串" $ing(0,3) $ing(0,3) :: ⽤于静态⽅法调⽤
⽤法如下:
[DateTime]::IsLeapYear(2008) 结果:True
[DateTime]::Now #返回当前时间 6.字符串运算符 + 连接两个字符串 * 按指定次数重复字符串 -f 设置字符串格式 -replace 替换运算符 ⽤法:"abcd" -replace "bc","TEST" 返回结果:aTESTd -match 正则表达式匹配 -like 通配符匹配 7.其他运算符 , 数组构造函数 .. 范围运算符 -is 类型鉴别器 ⽤法: $a = 100 $a -is [int] 返回结果:Ture $a -is [string] 返回结果:False -as 类型转换器 ⽤法: 1 -as [string] #将1作为字符串处理 -band ⼆进制与 -bor ⼆进制或 -bnot ⼆进制⾮ 8.运算符优先级 (){}
@$
!
[]
.
&
++或者--
⼀元+ -
* / % ⼆元 + - ⽐较运算符 -and -or | >>> = sPowershell命令解析顺序 别名(alias) 函数 cmdlet 脚本 可执⾏⽂件 正常⽂件PowerShell函数⽤法:⽤法⼀如下:(函数中改变变量值并不影响实际值) $var1=10 function one{"The Variable is $var1"} function two{$var1=20;one} one two one执⾏结果: The Variable is 10 The Variable is 20 The Variable is 10⽤法⼆如下:(函数中变量值的改变要⽤$Script:var的形式) $var1=10 function one{"The Variable is $var1"} function two{$Script:var1=20;one} one two one执⾏结果: The Variable is 10 The Variable is 20 The Variable is 20PowerShell条件控制的⽤法:⼀、循环类h的⽤法⽤法⼀如下: $var=1..6 #定义数组 foreach($i in $var) { $n++ Write-Host "$i" } Write-Host "there were $n record"执⾏结果: 1 2 3 4 5 6 there were 6 records⽤法⼆如下:直接获取管道数据 $n = 0 "a","b","c","d" | foreach{ $n++ Write-Host $_ } Write-Host "there were $n record"执⾏结果: a b c d there were 4 的⽤法⽤法⼀如下:n -le 5) #当$n++}执⾏结果:n 0 1 2 3 4 53. do...while的⽤法⽤法⼀如下:nn -ne 3) #当$n<>3时进⾏循环操作执⾏结果: 0 1 24. do...until的⽤法⽤法⼀如下:nn -gt 3) #当$n>3时停⽌操作执⾏结果: 0 1 2 3⼆、分⽀类⽤法if语法结构如下: if(条件1) {处理1} elseif(条件2) {处理2} ...elseif 可多次重复 else {处理3}⽤法如下: Get-Service |foreach{ #foreach{必须放在⼀起,不可换⾏放置 if($_.status -eq "running"){ #if(){ 必须放在⼀起,不可换⾏放置 write-host $_.displayname "("$_status")" -foregroundcolor "green" } else { write-host $_.displayname "("$_status")" -foregroundcolor "red" } }执⾏结果: Windows Audio Endpoint Builder ( ) Windows Audio ( ) ActiveX Installer (AxInstSV) ( ) BitLocker Drive Encryption Service ( ) Base Filtering Engine ( )⽤法switch语法结构如下: switch [-regex | -wildcard | -exact] [-casesensitive](表达式)| -file filename #表达式可以为数组,为数组时顺序处理数组每⼀项
# -file表⽰从⽂本获得输⼊,读取⽂本每⼀⾏,并对其执⾏switch块 { 字符1|数字1|变量1|表达式1 {处理1} #此处可加上;break 表⽰若匹配上则跳出switch语句
字符2|数字2|变量2|表达式2 {处理2} ...以上的组合可有多个,不可重复 default #默认处理⽅式,这个是防⽌匹配不上时的处理⽅式,类似错误处理。且default语句只可有⼀个 {处理3} }⽤法⼀如下: switch(表达式) $a = 3 switch($a) { 1 {"It's one";break} #break:表⽰若匹配跳出swith语句 2 {"It's two";break} 3 {"It's three";break} 4 {"It's four";break} 5 {"It's five";break} default {"It's unknown";break} }执⾏结果: It's three 若 $a = 8 执⾏结果为:It's unknown⽤法⼆如下:switch -casesensitive (表达式)表⽰区分⼤⼩写 $day = "day1" switch -casesensitive($day) # -casesensitive 表⽰⼤⼩写敏感,即区分⼤⼩写 { day1 {"It's Monday" ;break} day2 {"It's Tuesday";break} day3 {"It's Wednesday";break} day4 {"It's Thursday";break} day5 {"It's Friday";break} day6 {"It's Saturday";break} day7 {"It's Sunday";break} default {"It's unknown";break} }执⾏结果: It's Monday 若定义 $day = "Day1" 执⾏结果:It's unknown⽤法三如下:switch -regex(表达式)表⽰正则表达式匹配 $day = "day5" switch -regex ($day) { ^[a-z]+$
{"字母,匹配为:" +$_ ;break} ^[d]+$
{"数字,匹配为:" +$_ ;break} ^w+$
{"字母+数字,匹配为:" +$_ ;break} default {"什么都不是" +$_;break} }执⾏结果:字母+数字,匹配为:day6 若 $day = "day" 执⾏结果为:字母,匹配为:day6 若 $day = "1234" 执⾏结果为:数字,匹配为:1234 若 $day = 12 执⾏结果为:数字,匹配为:123 若 $day = "*&^%" 执⾏结果为:什么都不是,匹配为:*&^%⽤法四如下:switch -regex(表达式)表⽰正则表达式匹配 表达式可为数组 $day = "day5","day6" switch -regex ($day) { ^[a-z]+$
{"字母,匹配为:" +$_ ;} ^[d]+$
{"数字,匹配为:" +$_ ;} ^w+$
{"字母+数字,匹配为:" +$_ ;} default {"什么都不是" +$_;} }执⾏结果:字母+数字,匹配为:day5 字母+数字,匹配为:day6⽤法五如下:switch -wildcard (表达式)表⽰通配符匹配 $day = "day2" switch -wildcard ($day) { day2
{"day2,匹配为:" + $_;break} day3 {"day3,匹配为:" + $_;break} day*
{"通配符,匹配为:" + $_;break} default {"什么都不是:" +$_;break} }执⾏结果:day2,匹配为:day2 若 $day = "day5",执⾏结果为:通配符,匹配为:day5 若 $day = "sunshine",执⾏结果为:什么都不是:sunshine三、跳转类⽤法:break语句出现在foreach、for、while、switch等结构中时,break语句将使windows powershell⽴即退出整个循环。 在不循环的switch结构中,powershell将退出switch代码块。⽤法如下: $var = 0 while ($var -lt 10) { $var += 1 if($var -eq 5) { break #当var=5时,终⽌while循环 } write-host $var }执⾏结果: 1 2 3 ue⽤法:continue语句出现在foreach、for、while等循环结构中时,continue语句将使windows powershell⽴即退出某⼀次轮循环,并继续下⼀轮循环。⽤法如下: $var = 0 while ($var -lt 10) { $var += 1 if($var -eq 5) { continue #当var=5时,跳出本轮循环,继续下⼀轮循环 } write-host $var }执⾏结果: 1 2 3 4 6 7 8 9 10PowerShell抛出异常的Throw⽤法:⽤法如下: Throw 字符串|异常|ErrorRecord 如:throw "danger"返回结果:danger 及详细错误信息PowerShell获取出错信息的⽤法:⽤法如下:function one{get-process -ea stop #-ea定义错误发⽣以后该如何继续执⾏,意同-ErrorActionget-childitem ada -ErrorAction stop #此处有错误 路径ada不存在get-process -ErrorAction stop} one返回结果:报出错误信息PowerShell单步调试的⽤法:⽤法如下: #单步调试 ⾸先设置调试可⽤ set-psDebug -step ;若要设置为⾮调试状态 可⽤ set-psDebug -off for($i = 1;$i -le 10 ; $i++) { write-host "loop number $i" }执⾏结果:会出现逐步调试的对话框Memo
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690916850a462915.html
评论列表(0条)