PowerShell 基础记录
# 查看版本 $PSVersionTable # 科学运算 1gb # 动词+名词 命令 get-service # 支持面向对象 支持.net ps 6支持.net core调用,可跨平台,兼容性高,可扩展性高 ### 管道 和 重定向 # 管道(|):上一个命令的输出作为下一个命令的输入 (在.net core中,上一个方法结果作为下一个方法的参数。) # ls | findstr 1 # ls的结果传到方法findstr中查询包含1的内容 ls | Format-Table name, mode # 用neme排序,只抽出name和mode列 # 重定向符号 > 标识内容重定向到这个文件里。 >> 标识追加 # type 打印内容到屏幕。 # 数学运算 直接写 # 临时添加到当前环境变量 注意前面要有;否则会与上一个变量重叠。 $env:path = $env:path + ";C:\Users\" ### 命令集 ### Get-Command # 可以查询所有命令 # --Comlet 为powershell内部命令。 Get-Help Get-Command # 获得详细的使用方式。 Get-History # 获得历史 Get-Date # 获得时间 ### 别名 ### Get-Command # 别名为 gcm Get-Alias -Name ls # vs code 可以直接看到别名的真名。 # 下面格式: 获取Get-Alias的结果,然后通过Where-Object进行处理获得Remove结果 $_表示当前元素,Definition表示当前类型以调用其方法,其为交换的.net 方法。 Get-Alias | Where-Object { $_.Definition.StartsWith("Remove") } Get-Alias | Group-Object Definition | Sort-Object -Descending Count # 分组 排序 对数量进行降序排序。 ### 定义别名 ### Set-Alias -Name xxx -Value aaa # 临时将aaa别名定义为xxx Remove-Item Alias:xxx # 删除别名 Export-Alias xxx.ps1 # 导出别名 Import-Alias xxx.ps1 # 导入别名 -force 参数为强制导入。 ### 定义变量 ### $name = "value" # 定义变量 ,数值变量不需要双引号。 $name # 打印值。 # powershell 变量大小写是不敏感的。 ${""} # 这种类型的变量名可以随意字符,用{}括号括起来即可。 $n = (1 + 2) #这种类型可以直接继承结果。 $n = (Get-ChildItem) # $n中包含了Get-ChildItem的结果。 # powershell 中值对换。 $n1 = 1 $n2 = 2 $n1, $n2 = $n2, $n1 Get-ChildItem variable:$n # 查看当前是否存在 test-path $n # 查看是否存在此变量 ## 自动化变量 # -> 启动powershell后加载的变量。 # -> powershell自己维护的。 $home $pid # 查看变量,只读。 $$ # 查看home。 $? # 查看是否运行成功。 ## 环境变量 Get-ChildItem env: # 查看环境变量。 Get-ChildItem Env:OS # 环境变量中的Os版本。 $env:Name = "xxx" # 环境变量中name值。没有会新建。 remove-item Env:\Name # 删除环境变量。 # 用户变量永久生效。 [Environment]::setenvironmentvariable("PATH", "D:\", "USER") # .net 添加用户变量。 ### 条件运算符 ### # bool 值 -and (&&) -or(或者) -xor (同时为ture才为true) ! 逻辑否与-not 取反运算 -eq :等于 -ne :不等于 -gt :大于 -ge :大于等于 -lt :小于 -le :小于等于 -contains :包含 -notcontains :不包含 #if 以下内容基本与通用编程语言一致,没必要关注。 if (1 -eq 2) { 1 } elseif (1 -eq 1) { 2 } else { 3 } #switch switch ($x) { { ($_ -LT 10) -and ( $_ -LE 9) } { 10 } #多个条件内。 { $_ -LT 20 } { 20 } 22 { 22 } # 不写条件,直接相当限定就是这个值。 Default { 30 } } # foreach $arr = 1..10 # 等于arr=1,2,3,4,5,6,7,8,9,10 foreach ($item in $arr) { $item } # while do { Write-Host "表达式" break; } while (false) while (false) { Write-Host "表达式" continue; } # for for ($i = 0; $i -lt $arr.Count; $i++) { Write-Host "表达式" continue; } ### 数组 $arr = (1..5) $arr -is [array] #是否是一个数组。 $arr[1..2] # 数组切片。 $arr.Count # 查看长度 .Length。 ### 函数 ### function FunctionName { param ( $para # 无参不需要写。 ) Write-Host $para; } function FunctionName($name, $age) { return $name, $age } # 单返回 function FunctionName { param () return "Calls" } # 多返回。 function FunctionName { param () return "Calls", "Calls2" } # 调用 FunctionName "Calls" # 转义为 `符号 ### 与用户交互 Read-Host # 字符串格式化 "my name is $name" # 直接写。 "my name is {0}" -f $name # string 字符串操作。 与C#一致 $name.Split(".") ### 类型判断与转换 $a -is [int] $a -as [int] # 调用C# ::表示调用方法。 [System.IO.Directory]::GetFiles()
# 字典
$dic=${a=b}