PowerShell
PowerShell(包括Windows PowerShell和PowerShell Core)是微软公司开发的任务自动化和配置管理框架,由.NET Framework和.NET Core是构建的命令行界面壳层相关脚本语言组成,最初仅仅是Windows组件,后于2016年8月18日开源并跨平台支持。[4]
编程范型 | 命令式、管道、面向对象、函数式、反射式 |
---|---|
设计者 | 杰弗里·史诺威(Jeffrey Snover) 布鲁斯·帕耶特(Bruce Payette) 詹姆斯·特鲁赫(James Truher) (et al.) |
实现者 | Microsoft |
发行时间 | 2006年11月14日 |
当前版本 |
|
类型系统 | 强类型、类型安全、类型推论和动态类型 |
系统平台 | .NET Framework, .NET Core |
操作系统 | Windows 7及其后续版本、Linux、macOS |
许可证 | MIT许可证[2](但Windows组件仍然是专有的) |
文件扩展名 |
|
网站 | microsoft |
启发语言 | |
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[a] | 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 | 清除屏幕[b] |
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,[c] tasklist[d] | ps | 列出所有正在运行的进程 |
Stop-Process | spps, kill | kill,[c] taskkill[d] | kill[e] | 停止正在运行的进程 |
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功能。
- ^ 3.0 3.1 Available in Windows NT4, Windows 98 Resource Kit, Windows 2000 Support Tools
- ^ 4.0 4.1 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.
参考文献
- ^ Release 7.4.6. 2024年10月22日 [2024年10月24日].
- ^ PowerShell LICENSE
- ^ Snover, Jeffrey. PowerShell and WPF: WTF. Windows PowerShell Blog. Microsoft. 2008-05-25.
- ^ Bright, Peter. PowerShell is Microsoft's latest open source release, coming to Linux, OS X. Ars Technica. Condé Nast. 2016-08-18.
- ^ How Windows PowerShell works. Microsoft Developer Network. Microsoft. [2007-11-27].
- ^ Truher, Jim. Extend Windows PowerShell With Custom Commands. MSDN Magazine (Microsoft). December 2007. (原始内容存档于6 October 2008).
- ^ Test-Connection. PowerShell documentations. 微软. 9 August 2015.
扩展阅读
- Oakley, Andy. Monad (AKA PowerShell). O'Reilly Media. 2005. ISBN 0-596-10009-4.
- Holmes, Lee. Windows PowerShell Quick Reference. O'Reilly Media. 2006. ISBN 0-596-52813-2.
- Holmes, Lee. Windows PowerShell Cookbook. O'Reilly Media. 2007. ISBN 0-596-52849-3.
- Watt, Andrew. Professional Windows PowerShell. Wrox Press. 2007. ISBN 0-471-94693-1.
- Kumaravel, Arul; White, Jon; Naixin Li, Michael; Happell, Scott; Xie, Guohui; Vutukuri, Krishna C. Professional Windows PowerShell Programming: Snapins, Cmdlets, Hosts and Providers. Wrox Press. 2008. ISBN 0-470-17393-9.
- Kopczynski, Tyson; Handley, Pete; Shaw, Marco. Windows PowerShell Unleashed 2nd. Pearson Education. 2009. ISBN 978-0-672-32988-3.
- Jones, Don; Hicks, Jeffery. Windows PowerShell 2.0: TFM 3rd. Sapien Technologies. 2010. ISBN 978-0-9821314-2-8.
- Finke, Douglas. Windows PowerShell for Developers. O'Reilly Media. 2012. ISBN 1-4493-2270-0.
- Wilson, Ed. Windows PowerShell 3.0 Step by Step. Microsoft Press. 2013. ISBN 978-0-7356-6339-8.
- Wilson, Ed. Windows PowerShell Best Practices. Microsoft Press. 2014. ISBN 978-0-7356-6649-8.
外部链接
- 微软官网
- Windows PowerShell[永久失效链接]:PowerShell简介
- Windows PowerShell 3.0 Core Modules[永久失效链接]:PowerShell 3.0核心模块及模块中的命令用法
- Windows PowerShell Reference[永久失效链接]
- 使用 Windows PowerShell 撰写脚本[永久失效链接]
- 易学易用的Windows PowerShell
- PowerShell源代码
- MSDN视频教程
- 其他