# 查看版本
$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}