PowerShell

PowerShell（包括Windows PowerShell和PowerShell Core）是微軟公司開發的任務自動化和組態管理架構，由在.NET Framework和後來的.NET上構建的命令行界面殼層相關腳本語言組成，最初僅僅是Windows元件，後於2016年8月18日開源並提供跨平台支持。

在PowerShell中，管理任務通常由cmdlets（發音為command-lets）執行，這是執行特定操作的專用.NET類。可以將cmdlet集合至腳本、可執行文件（一般是獨立應用程式）中，或通過常規.NET類（或WMI / COM對象）實例化。

## 源起與目的

UNIX系統一直有著功能強大的殼程式（shell），Windows PowerShell的誕生就是要提供功能相當於UNIX系統的命令列殼程式（例如：sh、或csh），同時也內建腳本語言以及輔助腳本程式的工具。

## 程式特性

- 一致性的設計讓所有工具和系統資料的使用語法、命名原則都相同。
- 腳本語言簡單易學，而且能支援現有的腳本程式和命令列工具。
- 內含129種稱為cmdlet的標準工具，可用來處理常見的系統管理工作。
- 具備完整的擴充功能，獨立軟體商或開發者都能很容易的自行擴充。
- 進程間數據傳遞內容具有強類型特徵。
- PowerShell Core可以自動檢測字符編碼，自動識別Linux和Windows下的換行符，跨平台運行。

cmdlet是Windows PowerShell的指令，發音唸法為command-let。這相當於DOS或其他殼程式的內建指令，指令名稱的格式都是以連字號（-）隔開的一對動詞和名詞，並且通常都是單數名詞；例如線上查詢說明的cmdlet指令為get-help，名稱的動詞部分大致有get、set、add、remove等等（字母都不分大小寫）。

Windows PowerShell ISE是Windows PowerShell的主機應用程式。在此程序中，可以在單個Windows GUI中運行命令、編輯與測試腳本。此程序具有多行編輯、Tab補齊、上下文相關幫助、語法著色、選擇性執行等功能，而且還支持從右到左的書寫順序等功能。

## 技術基礎

Windows PowerShell是以.NET Framework技術為基礎，並且與現有的保持回溯相容，因此它的腳本程式不僅能存取.NET CLR，也能使用現有的技術。同時也包含了數種系統管理工具、簡易且一致的語法，常見如登錄資料庫、WMI。Exchange Server 2007以及System Center Operations Manager 2007等伺服器軟體都將內建Windows PowerShell。

## 範例

```powershell
get-process p* | stop-process
```

```powershell
get-process | where { $_.WS -gt 1000MB } | stop-process
```

```powershell
get-childitem | measure-object -property length -sum
```

- 將"hello, world!"字串轉為英文大寫字元，成為"HELLO, WORLD!"：

```powershell
"hello, world!".ToUpper()
```

```powershell
$rssUrl = "http://blogs.msdn.com/powershell/rss.aspx"
$blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl)
$blog.rss.channel.item | select title -first 8
```

### 命令提示字元比較

PowerShell（命令行）｜PowerShell（別名）｜命令提示符｜Unix shell｜描述

Get-ChildItem｜gci, dir, ls｜dir｜ls｜列出目前或指定資料夾中的所有檔案和資料夾

Test-Connection｜ping｜ping｜ping｜從目前電腦向指定電腦傳送Ping，或指示另一台電腦這樣做

Get-Content｜gc, type, cat｜cat｜取得檔案內容

Get-Command｜gcm｜, , 命令行補全｜列出可用的命令

Get-Help｜help, man｜, man｜在控制台上列印命令的文檔

Clear-Host｜cls, clear｜cls｜clear｜清除螢幕

Copy-Item｜cpi, copy, cp｜copy, , robocopy｜cp｜將檔案和資料夾複製到另一個位置

Move-Item｜mi, move, mv｜mv｜將檔案和資料夾移動到新位置

Remove-Item｜ri, del, erase, rmdir, rd, rm｜, , rmdir, rd｜rm, rmdir｜刪除檔案或資料夾

Rename-Item｜rni, ren, mv｜, rename｜mv｜重命名單個檔案、資料夾、硬連結或符號連結

Get-Location｜gl, cd, pwd｜cd｜pwd｜顯示工作路徑（目前資料夾）

Pop-Location｜popd｜popd｜popd｜將工作路徑更改為最近推送到堆疊上的位置

Push-Location｜pushd｜pushd｜pushd｜將工作路徑儲存到堆疊中

Set-Location｜sl, cd, chdir｜cd, chdir｜cd｜改變工作路徑

Tee-Object｜tee｜不適用｜tee｜將輸入管道傳輸到檔案或變數，並沿管道傳遞輸入

Write-Output｜echo, write｜echo｜echo｜將字串或其他對像列印到標準串流

Get-Process｜gps, ps｜tlist,｜ps｜列出所有正在執行的處理程序

Stop-Process｜spps, kill｜kill, taskkill｜kill｜停止正在執行的處理程序

Select-String｜sls｜findstr｜find, grep｜列印與模式匹配的列

Set-Variable｜sv, set｜env, export, set, setenv｜創建或更改環境變量的內容

Invoke-WebRequest｜iwr, curl, wget｜curl｜wget, curl｜取得網際網路上的網頁內容

## Windows PowerShell 3.0

PowerShell 3.0 與 Windows 8 和 Windows Server 2012 集成。微軟還為 Windows 7 的 Service Pack 1、Windows Server 2008 的 Service Pack 1 和 Windows Server 2008 R2 的 Service Pack 1 提供了 PowerShell 3.0。

PowerShell 3.0 是一個更大的軟體包 Windows Management Framework 3.0 (WMF3) (WMF3) 的一部分。

PowerShell 3.0 是一個更大的軟體包 Windows 管理框架 3.0 (WMF3) 的一部分，其中還包含支持遠程協作的 WinRM 服務。

PowerShell 3.0 的新功能包括：

- 計劃任務：可使用 Windows 任務調度程序基礎架構計劃任務在預定的時間和日期運行。
- 會話重新連接：會話可以斷開並重新連接。遠程會話現在能更好地應對臨時網路故障。
- 改進了代碼編寫：增加了代碼自動完成（IntelliSense）和代碼片段。PowerShell ISE 允許用戶使用對話框填寫 PowerShell cmdlet 參數。
- 授權支持：可將管理任務授權給無權執行此類任務的使用者，而無需授予他們永久性的額外權限。
- 更新幫助：可使用 Update-Help 命令更新幫助文檔。

## 安全性

PowerShell 5.1存在默認行為缺陷，攻擊者通過社交工程誘導使用者執行帶污染參數的命令或惡意HTTP，可進行命令注入，該漏洞已在2025年12月修復。

## 外部連結

微軟官網

- 如何使用 PowerShell 文件 - PowerShell | Microsoft Docs
- GitHub - PowerShell/PowerShell: PowerShell for every system!
- 易學易用的Windows PowerShell
- MSDN影片教程

其他

- PowerShell/PowerShell
- 維基： Windows PowerShell Survival Guide

## 基本資料

- screenshot caption：在Windows Terminal內運行的PowerShell 7
- 編程范型：命令式、管道、面向對象、函數式、反射式
- 發行日期：2006年11月14日
- 設計者：傑弗里·史諾威（Jeffrey Snover）、布魯斯·帕耶特（Bruce Payette）、詹姆斯·特魯赫（James Truher） (et al.)
- 開發者：Microsoft
- 類型系統：強類型、類型安全、類型推論和動態類型
- 平台：PowerShell: .NET、Windows PowerShell: .NET框架
- 許可證：MIT許可證（但Windows組件仍然是專有的）
- 受影響於：Ksh、Perl、IBM i 控制語言、DIGITAL命令語言、SQL、Tcl、Tk、Chef、Puppet
- 作業系統：Windows 7及其後續版本、Linux、macOS
- 類型：殼層、組態管理
- 文件擴展名：.ps1 (腳本文件)、.ps1xml（XML文檔）、.psc1（控制台文件）、.psd1（數據文件）、.psm1（腳本模塊）、.pssc（會話配置文件）、.cdxml (Cmdlet定義的XML文檔)