Li Huanshuai's Blogs

Powershell基础

PowerShell 是一种跨平台的任务自动化和配置管理框架,它是 Windows 的一部分,可以在 Windows、Linux 和 macOS 上运行。虽然功能上没有 Bash 那么强大,但是 PowerShell 有着更好的可移植性和跨平台性。PowerShell 由命令行解释器和脚本语言组成,它结合了传统的命令行工具、脚本语言和编程语言的优点,提供了强大的自动化功能。

基本概念

Cmdlet

Cmdlet 是 PowerShell 的基本命令,它是一个 .NET 类,用于执行特定的任务。Cmdlet 通常以 Verb-Noun 的形式命名,其中 Verb 描述了 Cmdlet 的操作,Noun 描述了 Cmdlet 的目标。例如,Get-Process 是一个 Cmdlet,用于获取系统中的进程列表。

Pipeline

Pipeline 是 PowerShell 的一个重要概念,它允许将 Cmdlet 的输出传递给另一个 Cmdlet。通过 Pipeline,我们可以将多个 Cmdlet 组合在一起,实现复杂的操作。例如,我们可以使用 Get-Process 获取进程列表,然后使用 Sort-Object 对进程列表进行排序。

Alias

Alias 是 PowerShell 的一个重要概念,它允许我们为 Cmdlet、函数、脚本块等创建别名。通过 Alias,我们可以使用简短的名称来调用 Cmdlet、函数、脚本块等。例如,我们可以为 Get-Process 创建别名 gps,然后使用 gps 来调用 Get-Process

Variable

Variable 是 PowerShell 的一个重要概念,它用于存储数据。Variable 可以存储各种类型的数据,包括字符串、整数、数组、哈希表等。Variable 的名称以 $ 开头,例如 $a$b$c

Function

Function 是 PowerShell 的一个重要概念,它用于定义可重复使用的代码块。Function 可以接受参数,并返回结果。Function 的名称以 function 开头,例如 function Test-Function { ... }

基本语法

注释

PowerShell 支持单行注释和多行注释。单行注释以 # 开头,多行注释以 <# 开头,以 #> 结尾。

# This is a single line comment

<#
This is a
multi-line
comment
#>

变量

PowerShell 使用 $ 符号来表示变量。变量的名称可以包含字母、数字和下划线,但不能以数字开头。变量的值可以是任何类型的数据,包括字符串、整数、数组、哈希表等。

$a = 1
$b = "Hello, World!"
$c = @("a", "b", "c")
$d = @{
    Name = "Alice"
    Age = 30
}

字符串

PowerShell 使用双引号 " 来表示字符串。双引号中的变量会被替换为其值。如果字符串中包含特殊字符,可以使用反引号 \ 进行转义。

$name = "Alice"
Write-Host "Hello, $name!"
Write-Host "Hello, `"World`"!"

数组

PowerShell 使用 @() 来表示数组。数组可以包含任意类型的数据,包括字符串、整数、数组、哈希表等。数组的元素可以通过索引访问,索引从 0 开始。

$array = @("a", "b", "c")

Write-Host $array[0]  # Output: a
Write-Host $array[1]  # Output: b
Write-Host $array[2]  # Output: c

哈希表

PowerShell 使用 @{} 来表示哈希表。哈希表由键值对组成,键和值之间使用 = 分隔,键值对之间使用 , 分隔。哈希表的键可以是任意类型的数据,值可以是任意类型的数据。

$hash = @{
    Name = "Alice"
    Age = 30
}

Write-Host $hash["Name"]  # Output: Alice
Write-Host $hash["Age"]   # Output: 30

条件语句

PowerShell 使用 ifelseifelse 关键字来表示条件语句。条件语句根据条件表达式的结果执行不同的代码块。

$a = 10

if ($a -gt 0) {
    Write-Host "a is greater than 0"
} elseif ($a -lt 0) {
    Write-Host "a is less than 0"
} else {
    Write-Host "a is equal to 0"
}

循环语句

PowerShell 使用 forforeachwhiledo-while 关键字来表示循环语句。循环语句根据条件表达式的结果重复执行代码块。

# for 循环
for ($i = 0; $i -lt 5; $i++) {
    Write-Host $i
}

# foreach 循环
$array = @("a", "b", "c")
foreach ($item in $array) {
    Write-Host $item
}

# while 循环
$i = 0
while ($i -lt 5) {
    Write-Host $i
    $i++
}

# do-while 循环
$i = 0
do {
    Write-Host $i
    $i++
} while ($i -lt 5)

函数

PowerShell 使用 function 关键字来定义函数。函数可以接受参数,并返回结果。函数的参数可以有默认值,也可以使用参数数组和参数哈希表。

function Add($a, $b) {
    return $a + $b
}

Write-Host (Add 1 2)  # Output: 3

常用命令

Get-Process

Get-Process 命令用于获取系统中的进程列表。它可以接受多个参数,包括进程名称、进程 ID、计算机名称等。相当于 Linux 的 ps 命令。

Get-Process

Get-Service

Get-Service 命令用于获取系统中的服务列表。它可以接受多个参数,包括服务名称、计算机名称等。相当于 Linux 的 systemctl 命令。

Get-Service

Get-Help

Get-Help 命令用于获取 PowerShell 命令的帮助信息。它可以接受多个参数,包括命令名称、命令参数等。相当于 Linux 的 man 命令。

Get-Help Get-Process

Set-Variable

Set-Variable 命令用于设置变量的值。它可以接受多个参数,包括变量名称、变量值等。

Set-Variable -Name a -Value 1

Write-Host

Write-Host 命令用于输出文本。它可以接受多个参数,包括文本内容、文本颜色等。

Write-Host "Hello, World!"

Start-Process

Start-Process 命令用于启动进程。它可以接受多个参数,包括进程名称、进程路径、进程参数等。

Start-Process notepad.exe

Select-Object

Select-Object 命令用于选择对象的属性。它可以接受多个参数,包括属性名称、计算属性等。

Get-Process | Select-Object -Property Name, CPU

Sort-Object

Sort-Object 命令用于对对象进行排序。它可以接受多个参数,包括排序属性、排序方向等。类似于 Linux 的 sort 命令,不过 Sort-Object 可以对对象的属性进行排序。

Get-Process | Sort-Object -Property CPU

Measure-Object

Measure-Object 命令用于测量对象的属性。它可以接受多个参数,包括统计属性、计算属性等。类似于 Linux 的 wc 命令,不过 Measure-Object 可以统计对象的属性。

cat file.txt | Measure-Object -Line

总结

PowerShell 是一种跨平台的任务自动化和配置管理框架,它结合了传统的命令行工具、脚本语言和编程语言的优点,提供了强大的自动化功能。PowerShell 的基本概念包括 Cmdlet、Pipeline、Alias、Variable、Function 等。PowerShell 的基本语法包括注释、变量、字符串、数组、哈希表、条件语句、循环语句、函数等。PowerShell 的常用命令包括 Get-Process、Get-Service、Get-Help、Set-Variable、Write-Host、Start-Process 等。PowerShell 是 Windows 的一部分,可以在 Windows、Linux 和 macOS 上运行,具有更好的可移植性和跨平台性。

参考资料

  1. PowerShell Documentation
  2. PowerShell Tutorial