Powershell基础

  • PowerShell
  1. 基础
  2. 开始

单行注释: #    多行注释: <# 内容 #>

〇清屏:clear或cls

〇终止程序:Ctrl+C

〇命令历史记录:Get-History | 清除记录:Clear-History(或clhy)

  1. 设置

■提前设好运行策略(默认Restricted):

"AllSigned":本地脚本运行需签名|"RemoteSigned":可运行本地脚本,禁网络脚本|"Unrestricted":无限制不推荐

■管理员身份运行:Start-Process pwsh(v5是powershell) -verb runas

〇当前运行策略:Get-executionpolicy

〇去除powershell脚本运行限制 (管理员身份运行):Set-ExecutionPolicy RemoteSigned

〇恢复脚本运行限制(管理员):Set-ExecutionPolicy Restricted

〇当前Powershell版本:Get-Host

  1. 帮助:*查询官网帮助文档

查询命令格式Get-Help 某命令 -examples(举例) #参数分有值参([参]<值>)和无值参

CMD命令在PS的名称Get-Alias(或gal) cmd命令名

调试|运行

  1. 代码语句{语句块就写里面}
  2. 显示&输入*输入的命令会优先运行

〇单行显示:echo xxx` x |换行显示:echo xx空格xx | 输入:Read-Host "请输入" |或echo

〇命令运行时间:Measure-Command {命令}

  1. 调用命令:.'文件路径'
  2. 命令结果输出到文件输命令 | Out-File -FilePath 文件路径 # 全路径或当前路径
  3. 记录命令历史并保存Start-Transcript -Path 文件路径输命令→停止记录:Stop-Transcript
  4. 延时运行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等

    1. 变量与数据:
  1. 变量
  1. 变量:powershell下标从0开始

〇是变量就加$:[数据类型]$变量

$_:系统自动变量

   〇获取变量列表:Get-Variable

  1. 获取类型:

$().GetType()

获取类型/属性/方法:$() |Get-Member -Name -InputObject 对象 -MemberType -View

  1. 清除变量值Clear-Variable -Name ""  # 不带$号
  2. 删除变量Remove-Variable -Name ""
  1. 数据类型
  1. 基本数据类型:整型int、long |浮点:double |字符串:string |布尔:boolean('true''false')
  1. 判断数据类型$变量 -is [数据类型]
  1. 数组/集合:
  1. 空数组:$数组 = @() |非空数组:$数组 = @(, ,...) |或范围:$数组 = 始值..终值 #范围符
  2. 获取/赋值元素(可批量):$[始下标..终下标] = |负下标获取:$谁数组[-始下标..-1]
  3. 添加元素:$谁数组 +=
  4. 数组长度:$谁数组.Length
  1. 字典:

@{键 = ; ...}

  1. 判断元素存在if($.ContainsKey("键")) {添加} #字典中键不能重复|结合判断是否存在,再添加
  2. 添加元素$.Add("键", "值")
  3. 删除元素$.Remove("键")
  4. 获取元素$.["键"]
  1. 数据类型转换:强转: [新数据类型]
  1. 按左转换:变量运算,转成左边变量数据类型。

    1. 操作/运算符
  1. 特殊操作符:

调用符/路径符:.|索引符/强转符:[]|范围符:..|数组元素符:,|创数组:@(xx,..)|创字典:@{k=v;..}

  1. 呼叫真值符&& "命令" # 命令不能加参数
  2. 调用静态xx符::
  3. 重定向符:命令结果输出到文件:命令 > 文件路径 | 命令结果附加到文件:命令 >> 文件路径
  1. 获取元素$.["键"]
  1. 管道传输符:A命令 | B命令 # 将A命令结果传输给B|管道两边形状(谁类型如test类)要一致
  1. 查询管道能传输的类型Get-Help 某命令 -Full-Parameter *
  2. 传输的方式:ByValue和ByPropertyName(输入对象具有与参数同名属性)
  1. 运算符:
  1. 算术运算符:()运算优先 |+、 -、 *、 /、  %、 (自增)++、 (自减)--
  2. 逻辑运算符:(与)-and |(或)-or |(异或)-xor |(非)!
  3. 比较运算符:(等于)-eq |(不等)-ne |小于(lessthan) -lt |(小于等于)-le |(大于)-gt |(包含)-contains

(不包含)-notcontains

  1. 赋值运算符:=、 +=、 -=、 *= 、 /=
  2. 三元运算符(ps7.0后):表达式 ? 式真就左 : 式假就右

    1. 字符串操作:
  1. 引号:'单引号':纯字符串  "双引号":变量可转义
  2. 字符串拼接分割:
  1. 拼接:①换行拼接:-Join "字符串",...|②同行拼接:-Join("字符串",..) |$ -Join "连接符"
  2. 分割:〇按字符间相同特征符分割:$ -Split "特征符",分成几组 #如-Split a=b=c,2→a和b=c

             〇按某字符分割:$谁字串 -Split {$_ -eq "某字符"} #如按b分割abcbc

  1. 字符串替换:谁字符串.Replace("原名", "新名")  
  2. 转字符串$.ToString()
  1. 拼接:①换行拼接:-Join "字符串",...|②同行拼接:-Join ("字符串",..) |$ -Join "连接符"

    1. 文件操作:

※路径建议字母数字下划线,不要空格与特殊符号

  1. 获取当前路径Get-Location -PSDrive(在啥驱动器上查找当前位置) 盘符
  2. 进入文件夹下: cdSet-Location(sl) 路径 (进当前目录:cd . |上级目录符: ..)
  3. 列出子项目:ls(或Get-ChildItemdir) -Path "路径" -Include "xx" -Recurse联合用等 #无路径即当前
  1. 列全路径:$谁数组.FullName
  2. 过滤查找:ls 可加参..| Where-Object(或?) {过滤条件(如$_.Name -like "i")} #文件名中包含i的
  3. 选择输出:Select-Object 属性(如name)
  4. 排序:如 列表 | Sort-Object {$_.Name} -Des #按name,降序
  5. 分组:Group-Object 按何属性分组
  1. 新建更改删除:

〇新建文件: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 文件路径

  1. 复制文件(可跨盘复制)

     |移动就改成Move-Item

  1. 文件复制:Copy-Item -Path "原路径*" -Destination "新路径" -Recurse -Container#没有则新建
  2. 排除/只包含xx:Copy-Item "文件路径*" -Destination "新路径" -Exclude或-Include '*.后缀'
  1. 重命名
  1. Rename-Item -Path "原路径(或注册表路径)" -NewName "内容"
  2. 返回全路径(字串形式):$谁对象.FullName

【批量重命名】

$list = ls -Path D:\test -Include "*.txt" -Recurse

$list | foreach {

    ren -Path $_.FullName $_.FullName.Replace("原名", "新名") #调用Replace函数

}

ls -参数,..| Ren -NewName {$_.Name -replace '原名', '新名'}

  1. 深隐藏文件(非系统盘):attrib +s +a +h +r 路径 |解除深隐藏(非系统盘):attrib -a -s -h -r 路径
  2. 设置项的值:例↓

〇起别名: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)+'>'}

    1. 正则表达式:
  1. 谁正则 = [regex] '正则式' 谁正则.Matches(字串) |[regex]::Matches(字串, '正则式')
  2. 判断是否匹配:字符串 -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‘)

    1. Powershell数学
  1. [System.Math]

凡是用函数就[Math]::某函数

  1. 基本算术:+、-、*、/、%、()
  2. 数学常数[Math]::PI、[Math]::E
  3. 函数运算:获取静态方法:[Math] | Get-Member -Static
  1. 常用:绝对值[Math]::Abs(xx) |幂Pow(底数,指数) |Exp(xx) |平方根Sqrt(xx) |取整Truncate(xx)
  2. 三角函:[Math]::sin(xx)等 | 反三角Asin(xx)|Atan(xx)|Atan2(xx)等。
  1. [System.Convert]
  1. 进制转换:
  1. 10进制转其他:[Convert]::ToString(十进制数, 2或8或16)
  2. 其他转10进制: [Convert]::ToInt32("对应进制数(如10)", 几进制(如2))
  1. 其他
  1. 存储容量转换:如1GB/1MB

  1. 流程控制语句
    1. 判断语句

【if (else)

if (条件) { # true的格式:"true"

bodys...

} else {

 bodys...

}

【if-else if】

if (条件) {

bodys...

} else if (条件){

 bodys...

}

    1. 循环语句

continue跳过本次循环 | break跳出整个循环

【for循环】

#初条件可写外面|条件控制可写里面

for ((初条件),...;{终条件可bodys};(条件控制),...或$($谁;..)) {

bodys..

breakcontinue

}

【while】

while (条件) {

bodys..

...

}

【do-while】

#先执行再判断

do {

   bodys..

...

} while (条件)

【do-until】

do {

   bodys;

...

} until (条件)

【foreach或%

#适用一次处理一个 | 可用管道传变量,此时可不写条件

命令 | foreach(xx in 范围){ bodys..}

    1. Switch语句

switch -Wildcard含通配符-Regex含正则(可多表达,...) {

{情况bodys} {bodys...; breakcontinue}

情况可重名...

"通配符" {bodys...; breakcontinue}

"正则式子" {bodys...; breakcontinue}

可用自动变量$_

default {bodys...; breakcontinue} # 兜底语句,不建议省略

}

  1. 函数 (命名遵循大驼峰动宾式)
    1. 简单函数

【①参数在外】

function 函数名([数据类型]$,...) {

 bodys...

 return xxx

}

【②参数在内】

function 函数名 {

    param([数据类型]$,...)

 bodys...

 return xxx

}

    1. 函数调用:万能赋值$谁=函数名 - 参数, - 参数,....
    2. 异常调式:
  1. Try块、catch块、finally块

try {

 试运行语句.... #出错后存储到自动变量&Error中

}

#try必须有catch或finally|若无catch,系统会找父作用域适当的catch

可多行catch {

 try出错后运行catch语句....

}

.....

#最后必运行,以释放资源

finally {

 bodys...

}

  1. 系统相关
    1. 进程
  1. 获取进程:Get-Process(或gps) |杀掉进程:Stop-Process(或kill) |Get-Command *xx(或gcm)

    1. 应用
  1. 获取应用列表:Get-AppxPackage
  2. 获取所有用户应用列表(管理员运行):Get-AppxPackage -AllUsers
  3. 移除应用(管理员):Remove-AppxPackage -Package 包名
  4. 获取包详细信息:Get-AppxPackageManife -Package 包名

本文链接:https://my.lmcjl.com/post/6943.html

展开阅读全文

4 评论

留下您的评论.