PowerShell 最初是 Windows 平台的,但现在已经有了 PowerShell Core,它是跨平台的,支持 Linux 和 macOS。在 PowerShell Core 中有一些Linux 和 macOS通用的命令。理清楚这些有助于学习多系统命令。
在 Linux/macOS 上使用 PowerShell 完成文件操作、系统管理、脚本编写等任务,同时保持与 Windows 环境的语法一致性。如果需要更复杂的跨平台脚本,建议结合 PowerShell 的平台检测功能(如$env:OSTYPE
)适配不同系统的差异。
一、系统信息与环境
-
Get-Command
功能:列出可用命令,查看命令详情。
示例:Get-Command Get-ChildItem
-
Get-Host
功能:获取当前 PowerShell 宿主环境信息(版本、平台等)。
示例:Get-Host | Format-List
-
Get-Location
功能:获取当前工作目录。
等价于:pwd
(Linux/macOS 命令) -
Set-Location
功能:切换工作目录。
等价于:cd
(Linux/macOS 命令)
示例:Set-Location /usr/bin
-
Get-Process
功能:获取系统进程信息(跨平台基于各系统的进程管理接口)。
示例:Get-Process | Where-Object { $_.MemoryUsage -gt 100MB }
-
Get-Command -Module Microsoft.PowerShell.Management
功能:查看管理模块中的通用命令(如文件操作、进程等)。
二、文件与目录操作
-
Get-ChildItem
功能:列出目录内容,等价于 Linux/macOS 的ls
。
示例:Get-ChildItem -Path /etc -Filter *.conf
-
New-Item
功能:创建文件或目录。
示例:New-Item -ItemType Directory -Path ~/Documents/NewFolder
-
Remove-Item
功能:删除文件或目录(使用时需谨慎)。
示例:Remove-Item -Path ~/temp/file.txt
-
Copy-Item
功能:复制文件或目录,等价于cp
。
示例:Copy-Item -Path source.txt -Destination target.txt
-
Move-Item
功能:移动或重命名文件 / 目录,等价于mv
。
示例:Move-Item -Path old.txt -Destination new.txt
-
Test-Path
功能:检查路径是否存在。
示例:if (Test-Path ~/Documents) { "目录存在" }
-
Get-Content
功能:读取文件内容,等价于cat
/more
/less
。
示例:Get-Content /etc/hosts
-
Set-Content
功能:写入内容到文件(覆盖),等价于>
。
示例:"Hello World" | Set-Content ~/greeting.txt
-
Add-Content
功能:追加内容到文件,等价于>>
。
示例:"Line 2" | Add-Content ~/greeting.txt
三、进程与服务管理
-
Get-Process
功能:获取进程信息(跨平台支持,Linux/macOS 基于ps
命令的封装)。
示例:Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5
-
Stop-Process
功能:终止进程。
示例:Stop-Process -Name "chrome"
-
Start-Process
功能:启动程序或进程(在 Linux/macOS 上可调用系统命令)。
示例:Start-Process "firefox"
,Start-Process "ls" -ArgumentList "-la"
-
Get-Service
功能:获取服务信息(Linux/macOS 上基于 systemd/sysvinit 等服务管理系统)。
示例:Get-Service | Where-Object { $_.Status -eq "Running" }
-
Restart-Service
功能:重启服务(需管理员 /root 权限)。
示例:Restart-Service sshd
(Linux 上重启 SSH 服务)
四、网络与通信
-
Invoke-WebRequest
功能:发送 HTTP/HTTPS 请求,等价于curl
/wget
。
示例:Invoke-WebRequest -Uri "https://api.github.com"
-
Test-NetConnection
功能:测试网络连接(如端口连通性),等价于telnet
/nc
。
示例:Test-NetConnection -ComputerName google.com -Port 80
-
Resolve-DnsName
功能:解析域名对应的 IP 地址。
示例:Resolve-DnsName -Name "baidu.com"
五、脚本与编程基础
-
变量与表达式
- 变量赋值:
$var = "Hello"
- 表达式:
$result = 10 * 2 + 5
- 变量赋值:
-
流程控制
- if 语句:
powershell
if ($env:OS -like "*Windows*") {"Windows系统" } elseif ($env:OSTYPE -like "darwin*") {"macOS系统" } else {"Linux系统" }
- for/foreach 循环:
powershell
foreach ($file in Get-ChildItem ~/Documents) {Write-Host "文件: $($file.Name)" }
- if 语句:
-
函数定义
powershell
function Get-OSInfo {$os = if ($env:OSTYPE -like "darwin*") { "macOS" }elseif ($env:OS -like "*Linux*") { "Linux" }else { "Windows" }Write-Output "当前系统: $os" }
-
管道与筛选
- 管道操作:
Get-ChildItem | Where-Object { $_.Length -gt 1MB } | Sort-Object -Descending Length
- 筛选与格式化:
Get-Process | Select-Object Name, CPU, Memory | Format-Table -AutoSize
- 管道操作:
六、其他通用命令
-
Write-Host
功能:输出文本到控制台(可带颜色)。
示例:Write-Host "成功!" -ForegroundColor Green
-
Read-Host
功能:从控制台读取用户输入。
示例:$name = Read-Host "请输入姓名"
-
Measure-Object
功能:计算数据的统计信息(如字符数、数值总和等)。
示例:"Hello World" | Measure-Object -Character
-
ConvertTo-Json / ConvertFrom-Json
功能:JSON 数据转换,跨平台通用。
示例:$obj = [PSCustomObject]@{Name="豆包"; Version=1.0}; $obj | ConvertTo-Json
-
Compare-Object
功能:比较两个对象或数据集的差异。
示例:Compare-Object (Get-ChildItem Dir1) (Get-ChildItem Dir2) -Property Name
注意事项
-
路径格式差异
- Windows 使用
\
(如C:\Users\user
),Linux/macOS 使用/
(如/home/user
),PowerShell Core 支持两种格式,但推荐使用/
以保持跨平台兼容性。
- Windows 使用
-
依赖平台的命令
- 部分 Windows 特有的命令(如
Get-ADUser
、Invoke-WmiMethod
)无法在 Linux/macOS 上使用,需避免依赖 Windows 特定 API 或组件。
- 部分 Windows 特有的命令(如
-
模块兼容性
- 某些模块(如
ActiveDirectory
)仅适用于 Windows,跨平台场景建议使用通用模块(如Microsoft.PowerShell.Management
、Net.Http
)。
- 某些模块(如
-
权限问题
- 在 Linux/macOS 上执行系统管理命令(如修改系统文件、重启服务)需使用
sudo
获取 root 权限,例如:sudo pwsh -c "Restart-Service sshd"
。
- 在 Linux/macOS 上执行系统管理命令(如修改系统文件、重启服务)需使用