Windows PowerShell
PowerShell(包括Windows PowerShell和PowerShell Core)是微軟公司开发的任务自动化和組態管理框架,由.NET Framework和.NET Core是构建的命令行界面殼層相关脚本语言组成,最初僅僅是Windows元件,后于2016年8月18日开源并跨平台支持。[4]
Screenshot of a Windows PowerShell session | |
命令式、管道、面向对象、函数式、反射式 | |
設計者 | 杰弗里·史诺威(Jeffrey Snover) 布鲁斯·帕耶特(Bruce Payette) 詹姆斯·特鲁赫(James Truher) (et al.) |
實作者 | Microsoft |
2006年11月14日 | |
穩定版本 | 7.1.0
(2020年11月11日[1]
) |
型態系統 | 强类型、类型安全、类型推论和动态类型 |
系统平台 | .NET Framework, .NET Core |
作業系統 | Windows 7及其后续版本、Linux、macOS |
許可證 | MIT許可證[2](但Windows组件仍然是专有的) |
文件扩展名 |
|
網站 | |
啟發語言 | |
Ksh、Perl、C#、CL、DCL、SQL、Tcl、Tk、[3]Chef、Puppet |
在PowerShell中,管理任务通常由cmdlets(发音为command-lets)执行,这是执行特定操作的专用.NET类。可以将cmdlet集合至脚本、可执行文件(一般是独立应用程序)中,或通过常规.NET类(或WMI / COM对象)实例化。[5][6]通过访问不同数据存储中的数据由PowerShell运行,如资源管理器或注册表。
源起與目的
UNIX系統一直有著功能強大的殼程式(shell),Windows PowerShell的誕生就是要提供功能相當於UNIX系統的命令列殼程式(例如:sh、bash或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技術為基礎,並且與現有的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(別名) | 命令提示符 | Unix shell | 描述 |
---|---|---|---|---|
Get-ChildItem | gci, dir, ls | dir | ls | 列出當前或給定文件夾中的所有文件和文件夾 |
Test-Connection[lower-alpha 1] | ping | ping | ping | 從當前計算機向指定計算機發送互聯網控制消息協議回顯請求,或指示另一台計算機這樣做 |
Get-Content | gc, type, cat | type | cat | 獲取文件內容 |
Get-Command | gcm | help | type, which, compgen | 列出可用的命令 |
Get-Help | help, man | help | apropos, man | 在控制台上打印命令的文檔 |
Clear-Host | cls, clear | cls | clear | 清除屏幕[lower-alpha 2] |
Copy-Item | cpi, copy, cp | copy, xcopy, robocopy | cp | 將文件和文件夾複製到另一個位置 |
Move-Item | mi, move, mv | move | mv | 將文件和文件夾移動到新位置 |
Remove-Item | ri, del, erase, rmdir, rd, rm | del, erase, rmdir, rd | rm, rmdir | 刪除文件或文件夾 |
Rename-Item | rni, ren, mv | ren, 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,[lower-alpha 3] tasklist[lower-alpha 4] | ps | 列出所有正在運行的進程 |
Stop-Process | spps, kill | kill,[lower-alpha 3] taskkill[lower-alpha 4] | kill[lower-alpha 5] | 停止正在運行的進程 |
Select-String | sls | findstr | find, grep | 打印与模式匹配的行 |
Set-Variable | sv, set | set | env, export, set, setenv | 创建或更改环境变量的內容 |
Invoke-WebRequest | iwr, |
curl | wget, curl | 获取因特网上的网页內容 |
- 尽管外部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] - Clear-Host被實現為預定義的PowerShell功能。
- Available in Windows NT4, Windows 98 Resource Kit, Windows 2000 Support Tools
- Available in Windows XP Professional Edition and later
- Also used in UNIX to send a process any signal, the "Terminate" signal is merely the default
-
curl
andwget
aliases are absent from PowerShell Core, so as to not interfere with invoking similarly named native commands.
參考文獻
- . GitHub. [2020-11-11].
- PowerShell LICENSE
- Snover, Jeffrey. . Windows PowerShell Blog. Microsoft. 2008-05-25.
- Bright, Peter. . Ars Technica. Condé Nast. 2016-08-18.
- . Microsoft Developer Network. Microsoft. [2007-11-27].
- Truher, Jim. . MSDN Magazine (Microsoft). December 2007 [2017-06-10]. (原始内容存档于2008-10-06).
- . PowerShell documentations. 微软. 9 August 2015.
擴展閱讀
- Oakley, Andy. . O'Reilly Media. 2005. ISBN 0-596-10009-4.
- Holmes, Lee. . O'Reilly Media. 2006. ISBN 0-596-52813-2.
- Holmes, Lee. . O'Reilly Media. 2007. ISBN 0-596-52849-3.
- Watt, Andrew. . Wrox Press. 2007. ISBN 0-471-94693-1.
- Kumaravel, Arul; White, Jon; Naixin Li, Michael; Happell, Scott; Xie, Guohui; Vutukuri, Krishna C. . Wrox Press. 2008. ISBN 0-470-17393-9.
- Kopczynski, Tyson; Handley, Pete; Shaw, Marco. 2nd. Pearson Education. 2009. ISBN 978-0-672-32988-3.
- Jones, Don; Hicks, Jeffery. 3rd. Sapien Technologies. 2010. ISBN 978-0-9821314-2-8.
- Finke, Douglas. . O'Reilly Media. 2012. ISBN 1-4493-2270-0.
- Wilson, Ed. . Microsoft Press. 2013. ISBN 978-0-7356-6339-8.
- Wilson, Ed. . Microsoft Press. 2014. ISBN 978-0-7356-6649-8.
外部連結
- 微软官网
- 如何使用 PowerShell 文件 - PowerShell | Microsoft Docs
- GitHub - PowerShell/PowerShell: PowerShell for every system! 页面存档备份,存于
- 易學易用的Windows PowerShell
- MSDN视频教程
- 其他