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}

 

posted @ 2020-07-22 20:34  指左转右  阅读(177)  评论(0编辑  收藏  举报