本頁使用了標題或全文手工轉換

PowerShell

維基百科,自由的百科全書
(重新導向自Windows PowerShell
跳至導覽 跳至搜尋
PowerShell
PowerShell Core 6.0 icon.png
PowerShell Core 7.1.5 with Windows Terminal.png
Windows Terminal內執行的PowerShell 7
編程範型命令式管道物件導向函數式反射式
設計者傑弗里·史諾威英語Jeffrey Snover(Jeffrey Snover)
布魯斯·帕耶特(Bruce Payette)
詹姆斯·特魯赫(James Truher) (et al.)
實作者Microsoft
面市時間2006年11月14日,​15年前​(2006-11-14
穩定版本
7.2.5[1]在維基數據編輯(2022年6月21日,2個月前)
型態系統強型別類型安全類型推論動態型別
系統平台PowerShell: .NET
Windows PowerShell: .NET框架
作業系統Windows 7及其後續版本、LinuxmacOS
授權條款MIT授權條款[2](但Windows組件仍然是專有的
副檔名
  • .ps1 (指令碼檔案)
  • .ps1xml(XML文件)
  • .psc1(控制台檔案)
  • .psd1(資料檔案)
  • .psm1(指令碼模組)
  • .pssc(對談設定檔)
  • .cdxml (Cmdlet定義的XML文件)
網站microsoft.com/powershell 編輯維基數據鏈結
啟發語言
KshPerlC#CL英語IBM i Control LanguageDCL英語DIGITAL Command LanguageSQLTclTk[3]ChefPuppet

PowerShell(包括Windows PowerShellPowerShell Core)是微軟公司開發的任務自動化和組態管理架構,由在.NET Framework和後來的.NET上構建的命令列介面殼層相關手稿語言組成,最初僅僅是Windows元件,後於2016年8月18日開源並提供跨平台支援。[4]

在PowerShell中,管理任務通常由cmdlets(發音為command-lets)執行,這是執行特定操作的專用.NET。可以將cmdlet集合至指令碼、可執行檔(一般是獨立應用程式)中,或通過常規.NET類(或WMI / COM物件)實例化。[5][6]

源起與目的[編輯]

UNIX系統一直有著功能強大的殼程式(shell),Windows PowerShell的誕生就是要提供功能相當於UNIX系統的命令列殼程式(例如:shbashcsh),同時也內建手稿語言以及輔助指令碼程式的工具。

程式特性[編輯]

  • 一致性的設計讓所有工具和系統資料的使用語法、命名原則都相同。
  • 手稿語言簡單易學,而且能支援現有的指令碼程式和命令列工具。
  • 內含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技術為基礎,並且與現有的WSH保持回溯相容,因此它的指令碼程式不僅能存取.NET CLR,也能使用現有的COM技術。同時也包含了數種系統管理工具、簡易且一致的語法,常見如登錄資料庫、WMI。Exchange Server 2007以及System Center Operations Manager 2007等伺服器軟體都將內建Windows PowerShell。

範例[編輯]

  • 停止所有目前執行中的以"p"字元開頭命名的程式:
get-process p* | stop-process
  • 停止所有目前執行中的所有使用大於1000MB記憶體的程式:
get-process | where { $_.WS -gt 1000MB } | stop-process
  • 計算一個目錄下檔案內的位元組大小:
get-childitem | measure-object -property length -sum
  • 將"hello, world!"字串轉為英文大寫字元,成為"HELLO, WORLD!":
"hello, world!".ToUpper()
  • 訂閱一個指定的RSS Feed並顯示它最近8個主題:
$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(命令列) PowerShell(別名) 命令提示符 Unix shell 描述
Get-ChildItem gci, dir, ls dir ls 列出目前或指定資料夾中的所有檔案和資料夾
Test-Connection[a] ping ping ping 從目前電腦向指定電腦傳送Ping,或指示另一台電腦這樣做
Get-Content gc, type, cat type英語TYPE (DOS command) cat 取得檔案內容
Get-Command gcm help英語help (command) type英語type (Unix), which英語which (command), compgen 列出可用的命令
Get-Help help, man help英語help (command) apropos英語apropos (Unix), man 在控制台上列印命令的文件
Clear-Host cls, clear cls英語cls (computing) clear 清除螢幕[b]
Copy-Item cpi, copy, cp copy, xcopy英語xcopy, robocopy英語robocopy cp 將檔案和資料夾複製到另一個位置
Move-Item mi, move, mv move英語move (command) mv 將檔案和資料夾移動到新位置
Remove-Item ri, del, erase, rmdir, rd, rm del英語del (command), erase英語del (command), rmdir, rd rm, rmdir 刪除檔案或資料夾
Rename-Item rni, ren, mv ren英語ren (command), rename mv 重新命名單個檔案、資料夾、硬連結或符號連結
Get-Location gl, cd, pwd cd pwd 顯示工作路徑(目前資料夾)
Pop-Location popd popd英語pushd and popd popd 將工作路徑更改為最近推播到堆疊上的位置
Push-Location pushd pushd英語pushd and popd pushd 將工作路徑儲存到堆疊中
Set-Location sl, cd, chdir cd, chdir cd 改變工作路徑
Tee-Object tee 不適用 tee 將輸入管道傳輸到檔案或變數,並沿管道傳遞輸入
Write-Output echo, write echo echo 將字串或其他對像列印到標準串流
Get-Process gps, ps tlist,[c] tasklist英語tasklist[d] ps 列出所有正在執行的處理程式
Stop-Process spps, kill kill英語kill (command),[c] taskkill[d] kill[e] 停止正在執行的處理程式
Select-String sls findstr find, grep 列印與模式匹配的列
Set-Variable sv, set set英語Environment variable#DOS env, export, set, setenv 建立或更改環境變數的內容
Invoke-WebRequest iwr, curl, wget[f] curl wget, curl 取得網際網路上的網頁內容
  1. ^ 儘管外部ping命令仍可用於PowerShell,但「Test-Connection」的輸出是一個可以通過編程來檢查的結構化物件
    While the external ping command remains available to PowerShell, Test-Connection's output is a structured object that can be programmatically inspected.[7]
  2. ^ Clear-Host被實現為預定義的PowerShell功能。
  3. ^ 3.0 3.1 Available in Windows NT4, Windows 98 Resource Kit, Windows 2000 Support Tools
  4. ^ 4.0 4.1 Available in Windows XP Professional Edition and later
  5. ^ Also used in UNIX to send a process any signal, the "Terminate" signal is merely the default
  6. ^ curl and wget aliases are absent from PowerShell Core, so as to not interfere with invoking similarly named native commands.

參考文獻[編輯]

  1. ^ v7.2.5 Release of PowerShell. 2022年6月21日 [2022年6月22日]. 
  2. ^ PowerShell LICENSE. [2017-06-10]. (原始內容存檔於2022-05-11). 
  3. ^ Snover, Jeffrey. PowerShell and WPF: WTF. Windows PowerShell Blog. Microsoft. 2008-05-25 [2017-06-10]. (原始內容存檔於2019-01-08). 
  4. ^ Bright, Peter. PowerShell is Microsoft's latest open source release, coming to Linux, OS X. Ars Technica. Condé Nast. 2016-08-18 [2017-06-10]. (原始內容存檔於2022-04-28). 
  5. ^ How Windows PowerShell works. Microsoft Developer Network. Microsoft. [2007-11-27]. (原始內容存檔於2008-09-05). 
  6. ^ Truher, Jim. Extend Windows PowerShell With Custom Commands. MSDN Magazine (Microsoft). December 2007 [2017-06-10]. (原始內容存檔於2008-10-06). 
  7. ^ Test-Connection. PowerShell documentations. 微軟. 9 August 2015 [2019-12-18]. (原始內容存檔於2016-10-31). 

擴展閱讀[編輯]

外部連結[編輯]

微軟官網
其他