Skip to content

Commit

Permalink
feat: Add PowerShell basics blog post
Browse files Browse the repository at this point in the history
  • Loading branch information
lihuanshuai committed Jul 16, 2024
1 parent c974645 commit a8c36e5
Show file tree
Hide file tree
Showing 2 changed files with 243 additions and 0 deletions.
238 changes: 238 additions & 0 deletions content/posts/powershell-basic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
+++
title = 'Powershell基础'
tags = ['Powershell']
date = 2024-07-05T00:34:17+08:00
draft = false
+++

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 支持单行注释和多行注释。单行注释以 `#` 开头,多行注释以 `<#` 开头,以 `#>` 结尾。

```powershell
# This is a single line comment
<#
This is a
multi-line
comment
#>
```

### 变量

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

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

### 字符串

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

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

### 数组

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

```powershell
$array = @("a", "b", "c")
Write-Host $array[0] # Output: a
Write-Host $array[1] # Output: b
Write-Host $array[2] # Output: c
```

### 哈希表

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

```powershell
$hash = @{
Name = "Alice"
Age = 30
}
Write-Host $hash["Name"] # Output: Alice
Write-Host $hash["Age"] # Output: 30
```

### 条件语句

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

```powershell
$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 使用 `for``foreach``while``do-while` 关键字来表示循环语句。循环语句根据条件表达式的结果重复执行代码块。

```powershell
# 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` 关键字来定义函数。函数可以接受参数,并返回结果。函数的参数可以有默认值,也可以使用参数数组和参数哈希表。

```powershell
function Add($a, $b) {
return $a + $b
}
Write-Host (Add 1 2) # Output: 3
```

## 常用命令

### Get-Process

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

```powershell
Get-Process
```

### Get-Service

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

```powershell
Get-Service
```

### Get-Help

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

```powershell
Get-Help Get-Process
```

### Set-Variable

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

```powershell
Set-Variable -Name a -Value 1
```

### Write-Host

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

```powershell
Write-Host "Hello, World!"
```

### Start-Process

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

```powershell
Start-Process notepad.exe
```

### Select-Object

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

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

### Sort-Object

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

```powershell
Get-Process | Sort-Object -Property CPU
```

### Measure-Object

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

```powershell
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](https://docs.microsoft.com/en-us/powershell/)
2. [PowerShell Tutorial](https://www.tutorialspoint.com/powershell/index.htm)
5 changes: 5 additions & 0 deletions content/posts/pre-commit-local-hook.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,8 @@ pre-commit run
- entry 脚本需要有可执行权限,可以使用 `chmod +x scripts/my-local-hook.sh` 命令添加可执行权限。
- entry 脚本不仅可以是 Shell 脚本,还可以是 Python 脚本、JavaScript 脚本等等。
- 可以在 entry 脚本中调用其他工具,比如 `flake8`、`black`、`isort` 等等,来进行代码检查。

## 参考资料

1. [Pre-commit](https://pre-commit.com/)
2. [pre-commit-hooks](https://pre-commit.com/hooks.html)

0 comments on commit a8c36e5

Please sign in to comment.