- PowerShell
- 基础
- 开始
单行注释: # 多行注释: <# 内容 #>
〇清屏:clear或cls
〇终止程序:Ctrl+C
〇命令历史记录:Get-History | 清除记录:Clear-History(或clhy)
- 设置:
■提前设好运行策略(默认Restricted):
"AllSigned":本地脚本运行需签名|"RemoteSigned":可运行本地脚本,禁网络脚本|"Unrestricted":无限制不推荐
■管理员身份运行:Start-Process pwsh(v5是powershell) -verb runas
〇当前运行策略:Get-executionpolicy
〇去除powershell脚本运行限制 (管理员身份运行):Set-ExecutionPolicy RemoteSigned
〇恢复脚本运行限制(管理员):Set-ExecutionPolicy Restricted
〇当前Powershell版本:Get-Host
- 帮助:*查询官网帮助文档
〇查询命令格式:Get-Help 某命令 -examples(举例) #参数分有值参([参]<值>)和无值参
〇CMD命令在PS的名称:Get-Alias(或gal) cmd命令名
调试|运行:
- 代码语句:{语句块就写里面}
- 显示&输入:*输入的命令会优先运行
〇单行显示:echo xx或x` x |换行显示:echo xx空格xx | 输入:Read-Host "请输入" |或echo
〇命令运行时间:Measure-Command {命令}
- 调用命令:.'文件路径'
- 命令结果输出到文件:输命令 | Out-File -FilePath 文件路径 # 全路径或当前路径
- 记录命令历史并保存:Start-Transcript -Path 文件路径→输命令→停止记录:Stop-Transcript
- 延时运行:Start-Sleep -Seconds或-Milliseconds 秒数或毫秒数
■命令全部参数用法:
命令(如ls) -Path(支持通配符) "路径" -Destination "路径" 可继续加参... | |
<可选参数列表|有些参数某命令没有> -Filter(过滤出) "如*.txt" -Include(只含) "内容" -Confirm(运行前确认) -Container:$false(保留原对象格式,默认true) -Directory "内容" -Exclude "内容" -File "内容" -Recurse(挨个递归找) -Depth目录层数(0当前|1第二级..) -Force(此参可获取无法访问的项目) -ItemType "类型"(文件类型有File/SymbolLink/Directory/Junction/HardLink等) -Name "内容" -Attributes (值有ReadOnly/Hidden/System/Directory/Archive/Device/Temporary/Compressed/Offline/Encrypted/等) -Hidden(显示隐藏文件) -ReadOnly(显示只读文件) | -FromSession(从将被复制的远程文件上指PSS对象) PSS对象 |-ToSession(将文件拷到远程电脑) PSS对象 -InputObject(ps对象) -LiteralPath(一个或多个路径) -MemberType (值有AliasProperty/CodeProperty/Property/NotePropert/ScriptProperty/PropertySet/Method/CodeMethod/ScriptMethod/Methods/ParameterizedProperty/MemberSet/Event/Dynamic/InferredProperty/Properties/All) -PathThru(控制台打印(默隐藏的)操作结果(对象)) -PSDrive(在哪驱动器查找) 盘符 -Scope(变量范围) local或global或private等 -View (值有Extended|Adapted|Base|All) -WhatIf(运行cmdlet时会怎样) -Static(筛选静态的xxx) -Stream(从文件中获取特定备用NTFS流,仅用于驱动器) -System等 |
-
- 变量与数据:
- 变量:
- 变量:powershell下标从0开始
〇是变量就加$:[数据类型]$变量
〇$_:系统自动变量
〇获取变量列表:Get-Variable
- 获取类型:
〇$谁或(值).GetType()
〇获取类型/属性/方法:$谁或(值) |Get-Member -Name -InputObject 对象 -MemberType 值 -View 值
- 清除变量值:Clear-Variable -Name "谁" # 不带$号
- 删除变量:Remove-Variable -Name "谁"
- 数据类型:
- 基本数据类型:整型int、long |浮点:double |字符串:string |布尔:boolean('true'或'false')
- 判断数据类型:$变量 -is [数据类型]
- 数组/集合:
- 空数组:$数组 = @() |非空数组:$数组 = @(值, 值,...) |或范围:$数组 = 始值..终值 #范围符
- 获取/赋值元素(可批量):$谁[始下标..终下标] = 值 |负下标获取:$谁数组[-始下标..-1终]
- 添加元素:$谁数组 += 值
- 数组长度:$谁数组.Length
- 字典:
@{键 = 值; ...}
- 判断元素存在:if($谁.ContainsKey("键")) {添加} #字典中键不能重复|结合判断是否存在,再添加
- 添加元素:$谁.Add("键", "值")
- 删除元素:$谁.Remove("键")
- 获取元素:$谁.["键"]
- 数据类型转换:强转: [新数据类型]谁
- 按左转换:变量运算,转成左边变量数据类型。
-
- 操作/运算符:
- 特殊操作符:
调用符/路径符:.|索引符/强转符:[]|范围符:..|数组元素符:,|创数组:@(xx,..)|创字典:@{k=v;..}
- 呼叫真值符&:& "命令" # 命令不能加参数
- 调用静态xx符:::
- 重定向符:命令结果输出到文件:命令 > 文件路径 | 命令结果附加到文件:命令 >> 文件路径
- 获取元素:$谁.["键"]
- 管道传输符:A命令 | B命令 # 将A命令结果传输给B|管道两边形状(谁类型如test类)要一致
- 查询管道能传输的类型:Get-Help 某命令 -Full或-Parameter *
- 传输的方式:ByValue和ByPropertyName(输入对象具有与参数同名属性)
- 运算符:
- 算术运算符:()运算优先 |+、 -、 *、 /、 %、 (自增)++、 (自减)--
- 逻辑运算符:(与)-and |(或)-or |(异或)-xor |(非)!
- 比较运算符:(等于)-eq |(不等)-ne |小于(lessthan) -lt |(小于等于)-le |(大于)-gt |(包含)-contains
(不包含)-notcontains
- 赋值运算符:=、 +=、 -=、 *= 、 /=
- 三元运算符(ps7.0后):表达式 ? 式真就左 : 式假就右
-
- 字符串操作:
- 引号:'单引号':纯字符串 "双引号":变量可转义
- 字符串拼接分割:
- 拼接:①换行拼接:-Join "字符串",...|②同行拼接:-Join("字符串",..) |$谁 -Join "连接符"
- 分割:〇按字符间相同特征符分割:$谁 -Split "特征符",分成几组 #如-Split “a=b=c”,2→a和b=c
〇按某字符分割:$谁字串 -Split {$_ -eq "某字符"} #如按b分割’abcbc’
- 字符串替换:谁字符串.Replace("原名", "新名")
- 转字符串:$谁.ToString()
- 拼接:①换行拼接:-Join "字符串",...|②同行拼接:-Join ("字符串",..) |$谁 -Join "连接符"
-
- 文件操作:
※路径建议字母数字下划线,不要空格与特殊符号
- 获取当前路径:Get-Location -PSDrive(在啥驱动器上查找当前位置) 盘符
- 进入文件夹下: cd或Set-Location(或sl) 路径 (进当前目录:cd . |上级目录符: ..)
- 列出子项目:ls(或Get-ChildItem或dir) -Path "路径" -Include "xx" -Recurse联合用等 #无路径即当前
- 列全路径:$谁数组.FullName
- 过滤查找:ls 可加参..| Where-Object(或?) {过滤条件(如$_.Name -like "i")} #文件名中包含i的
- 选择输出:Select-Object 属性(如name)
- 排序:如 列表 | Sort-Object {$_.Name} -Des #按name,降序
- 分组:Group-Object 按何属性分组
- 新建更改删除:
〇新建文件:New-Item -Path "路径",..-Name "文件名" -ItemType "类型(如File)" -Value "写入内容"等
·删除:Remove-Item "文件路径"
·新建文件夹(linux命令):mkdir "文件夹路径" | 删除(linux):rm -r .\当前文件夹下文件路径
〇追加文件内容:Add-Content "文件路径"(全路径或.\当下路径) -Value “新内容”
〇覆盖文件内容:Set-Content 文件路径 -Value “新内容”
〇查看文件内容:Get-Content 文件路径 -Value “新内容”|(linux):cat 文件路径
- 复制文件(可跨盘复制):
|移动就改成Move-Item
- 文件复制:Copy-Item -Path "原路径*" -Destination "新路径" -Recurse -Container#没有则新建
- 排除/只包含xx:Copy-Item "文件路径*" -Destination "新路径" -Exclude或-Include '*.后缀'
- 重命名:
- Rename-Item -Path "原路径(或注册表路径)" -NewName "内容"
- 返回全路径(字串形式):$谁对象.FullName
【批量重命名】 $list = ls -Path D:\test -Include "*.txt" -Recurse $list | foreach { ren -Path $_.FullName $_.FullName.Replace("原名", "新名") #调用Replace函数 } 或ls -参数,..| Ren -NewName {$_.Name -replace '原名', '新名'} |
- 深隐藏文件(非系统盘):attrib +s +a +h +r 路径 |解除深隐藏(非系统盘):attrib -a -s -h -r 路径
- 设置项的值:例↓
〇起别名:Set-Item -Path alias:新名字 -Value "函数、脚本、exe、cmdlet文件路径"
〇更改环境变量:Set-Item -Path env:UserRole -Value "Administrator"
〇修改路径提示:Set-Item -Path function:prompt -Value {'>'+(Get-Date -Format t)+(GL)+'>'}
-
- 正则表达式:
- :谁正则 = [regex] '正则式' →谁正则.Matches(字串) |或[regex]::Matches(字串, '正则式')
- 判断是否匹配:字符串 -match 规则
|要把规则看成一个整体
【字符类】
符号 | 说明 |
[字符组] | 匹配组里包含的任一字符。(如’[abc]"匹配"gray"后是’a’) |
[^字符组] | 取反字符组:匹配未包含的字符(如’[^abc]’匹配’gray’中的’g’,’r’,’y’) |
[ 始字符-终字符] | 字符范围:匹配范围内的字符(如’[a-z]’、’[0-9]’) |
. | 通配符:遍历匹配除\n外的任何单字符,若匹配句点则加转义\. |
\p{Unicode属性} | 匹配满足Unicode属性的字符(如\p{Lu}会匹配’Iron M’大写字→’I’, ‘M’ |\p{Ll}匹配小写字) |
\P{name}\ | 匹配不满足Unicode属性的所有字符。(如\p{Lu}匹配’Iron’后是’r’, ‘o’, ‘n’ |
\d | 十进制数单字符,等效于[0-9] |
\D | 非十进制数单字符,等于[^0-9] |
\s | 空白单字符。(如\s\d匹配’A12 3’后是’ 3’) |
\S | 非空白单字符。(如\s\S匹配’A B1.0’后是’ B’) |
\w | 匹配单词单字符(字母数字),等于’[A-Za-z0-9_]’。 (如’A B1.0’中的’A’, ‘B’, ‘1’, ‘0’) |
\W | 匹配非单词单字符,等于’[^A-Za-z0-9_]’ |
【匹配次数】※注意带’? ’与不带’? ’的区别
符号 | 说明 |
* | 匹配前面的单字符0或多个,等于{0,}|相当于有几个前面的正则符。(如’1.*3’可匹配’12323’中的’12323’) |
+ | 匹配前面的单字符1或多个,等于{1,} |
? | 匹配前面单字符0或1个 |
{n} | 匹配前面单字符 n 个 |
{n,} | 匹配前面单字符至少 n个。(如’1.{1,}3’匹配’1223 23a’) |
{n,m} | 遍历匹配前面单字符最多要m个,最少n个。(如’\d{1,3}’匹配’1234’中的’123’, ‘4’) |
*? | 匹配前面单字符0或多个(但个数尽量最少)(如’1.*3’可匹配’12323’中的’123’) |
+? | 匹配前面单字符1或多个(个数尽量最少) |
?? | 匹配前面单字符0或1个(个数尽量最少)。(如’ab??c’匹配’abc’后是’ac’) |
{n}? | 匹配前面字符 n 个。(如’1.{1,}3’匹配’1223 23a’) |
{n,}? | 匹配前面单字符最少n个(个数尽量最少) |
{n,m}? | 匹配前面单字符最多m个,最少n个(个数尽量最少) |
【定位点】
符号 | 说明 |
^或\A | 从字符串开头开始|多行文本要从该行开头开始。(如‘^\d{3}‘匹配‘1234‘) |
$或\Z | 匹配字符串末尾位置,或字符串末尾的\n 之前;多行文本要在该行末尾或末尾\n之前。(如’-\d{3}$’匹配‘-123-444’ ) |
\G | 在上一个匹配结束的位置进行;如果以前没有匹配项,则从开始进行匹配的字符串中的位置开始。(如\G\(\d\)匹配‘(1)(3)(5)[7](9)’ ) |
\b | 写在边界,必须以什么为开头或结尾。(如’\b\w+’匹配’ab-c’后是’ab’, ’c’) |
\B | 写在边界,不能以什么为开头或结尾。(如‘\Babw*‘匹配‘abc-dab‘) |
【转义字符】
符号 | 说明 |
\\ | 转义符号 |
\nnn | 用(2或3位)八进制数表示指定字符(如‘\w\040\w‘匹配‘a bc d’(8进制空格)后是’a b’, ’c d’) |
\xnn | 用2位十六进制数表示指定字符(如‘\w\x20\w‘匹配‘a bc d’(16进制空格)后是’a b’, ’c d’) |
【替换构造】
符号 | 说明 |
| | 匹配以竖线|分隔的任何元素。(如’th(e|at)’匹配‘this the’) |
(?( (?= expression))yes|no) | 若与表达式符合,则匹配左边否则右边。(如‘(?(A)A\d{2}\b|\b\d{3}\b)‘匹配‘A12 C101 888’ |
(子表达式) | 捕获匹配的子表达式并将其分配到一个从1开始的序号中。(如‘(\w)\1‘匹配‘deep‘) |
-
- Powershell数学
- [System.Math]
凡是用函数就:[Math]::某函数
- 基本算术:+、-、*、/、%、()
- 数学常数:[Math]::PI、[Math]::E
- 函数运算:获取静态方法:[Math] | Get-Member -Static
- 常用:绝对值[Math]::Abs(xx) |幂Pow(底数,指数) |Exp(xx) |平方根Sqrt(xx) |取整Truncate(xx)
- 三角函:[Math]::sin(xx)等 | 反三角Asin(xx)|Atan(xx)|Atan2(xx)等。
- [System.Convert]
- 进制转换:
- 10进制转其他:[Convert]::ToString(十进制数, 2或8或16)
- 其他转10进制: [Convert]::ToInt32("对应进制数(如10)", 几进制(如2))
- 其他
- 存储容量转换:如1GB/1MB
- 流程控制语句
- 判断语句
【if (else)】 if (条件) { # true的格式:"true" bodys... } else { bodys... } | 【if-else if】 if (条件) { bodys... } else if (条件){ bodys... } |
-
- 循环语句
■continue跳过本次循环 | break跳出整个循环
【for循环】 #初条件可写外面|条件控制可写里面 for ((初条件),...;{终条件可bodys};(条件控制),...或$($谁;..)) { bodys.. break或continue } | 【while】 while (条件) { bodys.. ... } | 【do-while】 #先执行再判断 do { bodys.. ... } while (条件) | 【do-until】 do { bodys; ... } until (条件) |
【foreach或%】 #适用一次处理一个 | 可用管道传变量,此时可不写条件 命令 | foreach(xx in 范围){ bodys..} |
-
- Switch语句
switch -Wildcard含通配符或-Regex含正则(可多表达式,...) { {情况或bodys} {bodys...; break或continue} 情况可重名... "通配符" {bodys...; break或continue} "正则式子" {bodys...; break或continue} 可用自动变量$_ default {bodys...; break或continue} # 兜底语句,不建议省略 } |
- 函数 (命名遵循大驼峰动宾式)
- 简单函数
【①参数在外】 function 函数名([数据类型]$谁,...) { bodys... return xxx } | 【②参数在内】 function 函数名 { param([数据类型]$谁,...) bodys... return xxx } |
-
- 函数调用:万能赋值$谁=函数名 -谁 参数, -谁 参数,....
- 异常调式:
- Try块、catch块、finally块
try { 试运行语句.... #出错后存储到自动变量&Error中 } #try必须有catch或finally|若无catch,系统会找父作用域适当的catch 可多行catch { try出错后运行catch语句.... } ..... | #最后必运行,以释放资源 finally { bodys... } |
- 系统相关
- 进程:
- 获取进程:Get-Process(或gps) |杀掉进程:Stop-Process(或kill) |Get-Command *xx(或gcm)
-
- 应用:
- 获取应用列表:Get-AppxPackage
- 获取所有用户应用列表(管理员运行):Get-AppxPackage -AllUsers
- 移除应用(管理员):Remove-AppxPackage -Package 包名
- 获取包详细信息:Get-AppxPackageManife -Package 包名
本文链接:https://my.lmcjl.com/post/6943.html
4 评论