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 上執行系統管理命令(如修改系統文件、重啟服務)需使用