时间:2023-06-02 16:16:41 来源: 人气:
PowerShell 从 Windows7 时代开始内置于 Windows 系统当中,可以看作是微软对 cmd 的大升级,目前两者并存于 Windows 系统中。
与接受和返回文本的大多数 shell 不同,Windows PowerShell 是在 .NET Framework 公共语言运行时 (CLR) 和 .NET Framework 的基础上构建的,它接受和返回 .NET Framework 对象。环境中的这一根本更改带来了管理和配置 Windows 的全新工具和方法。只要你足够了解.net,你可以使用她做任何你想做的事情。
微软起“PowerShell ”这个名字虽然有吹牛逼的嫌疑(我以前也这样想),但从事实来看并非如此。PowerShell 的强大程度分分钟秒杀 Linux 上的 bash,更不要说饱受诟病的 cmd 了。
PowerShell 背后依靠的是一套完整的 .NET 编程体系,其脚本更容易编写且稳健性大大提升。反过来看 cmd,那些完全由各种命令堆砌而成的一条条指令简直就是“小打小闹”。
如果你对老朋友 cmd 充满情怀,无法舍弃,完全无妨!因为 PowerShell 可以看作 cmd 的超集,所有的常用命令诸如dir, cd, ipconfig等在 PowerShell 中都能直接使用。但背后的实现方式是完全不同的,PowerShell 基于完全的面向对象,它通过给函数和对象“起别名”的方式来支持这些旧的命令。
管道操作的灵感来自 Linux 的 shell,但由于 PowerShell 将一切都包装成为对象,而不是直接处理字符串,因此其管道操作的灵活程度远在 Linux 的 shell 之上。
例如:
PS C:UsersHaley> ls | sort -Descending Name | Format-Table Name,Mode Name Mode ---- ---- VirtualBox VMs d----- Videos d-r--- Searches d-r--- Saved Games d-r--- Pictures d-r--- OneDrive d-r--- Music d-r--- Links d-r---
这条命令列出当前路径下的所有文件,按照名称降序排序,并以表格的形式输出,且只显示Name和Mode两个字段。
任何函数与对象都能够通过help *命令来查看其帮助文档(准确来说应该是Get-Help函数,这是更加“面向对象”化的命名方式,而help是它的别名),如果看不明白,加上-examples参数会有应用实例,如果仍看不明白,加上-online参数会打开完整的在线帮助文档,不得不佩服,微软的一条龙服务做的很到位。
例如,关于ls的帮助文档如下:
PS C:UsersHaley> help ls 名称 Get-ChildItem 摘要 Gets the items and child items in one or more specified locations. 语法 Get-ChildItem [[-Filter] ] [-Attributes {ReadOnly | Hidden | System | Directory | Archive | Device | Normal | Temporary | SparseFile | ReparsePoint | Compressed | Offline | NotContentIndexed | Encrypted | IntegrityStream | NoScrubData}] [-Depth ] [-Directory] [-Exclude ] [-File] [-Force] [-Hidden] [-Include ] -LiteralPath [-Name] [-ReadOnly] [-Recurse] [-System] [-UseTransaction] [] Get-ChildItem [[-Path] ] [[-Filter] ] [-Attributes {ReadOnly | Hidden | System | Directory | Arch ive | Device | Normal | Temporary | SparseFile | ReparsePoint | Compressed | Offline | NotContentIndexed | Encrypte d | IntegrityStream | NoScrubData}] [-Depth ] [-Directory] [-Exclude ] [-File] [-Force] [-Hidden] [-Include ] [-Name] [-ReadOnly] [-Recurse] [-System] [-UseTransaction] [] 说明 The Get-ChildItem cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get items in all child cont ainers. A location can be a file system location, such as a directory, or a location exposed by a different Windows PowerSh ell provider, such as a registry hive or a certificate store. 相关链接 Online Version: http://go.microsoft.com/fwlink/?LinkId=821580 Get-Item Get-Location Get-Process Get-PSProvider 备注 若要查看示例,请键入: "get-help Get-ChildItem -examples". 有关详细信息,请键入: "get-help Get-ChildItem -detailed". 若要获取技术信息,请键入: "get-help Get-ChildItem -full". 有关在线帮助,请键入: "get-help Get-ChildItem -online"
PS C:UsersHaley> 1 + 1 2 PS C:UsersHaley> 3 * 5 15 PS C:UsersHaley> 0xab 171 PS C:UsersHaley> 1kb 1024 PS C:UsersHaley> 1mb / 1kb 1024
PowerShell 脚本的语法与高级编程语言非常相近,例如其分支语句if(…){} else{}、循环语句for(…){}与 C 语言别无二致,因而大大提高了编程体验。
字符串处理是 shell 脚本的主要任务,正则表达式的重要性也无需多说。
PowerShell 原生支持将结果导出到html, csv, xml等文件,也可以通过重定向从文件中读取内容。
例如:
PS C:UsersHaley> ls | Select-Object Mode,Name | Export-Csv ~/desktop/test.csv
这样就把当前目录下的所有 文件名-读写权限 保存到了一个 csv 文件中。
虽然这个功能很少用到,但支持 debug 是走向完备编程语言不可或缺的一项功能。