什么是Windows PowerShell?它吃什么?第1部分:主要功能

从历史上看,Unix系统上的命令行实用程序比Windows上的开发更好,但是,随着新解决方案的出现,情况发生了变化。

Windows PowerShell允许系统管理员自动执行大多数日常任务。借助它的帮助,您可以更改设置,停止和启动服务,以及执行大多数已安装应用程序的维护。将蓝色窗口视为另一个命令解释器是错误的。这种方法不能反映Microsoft提出的创新的实质。实际上,Windows PowerShell的可能性要广泛得多:在简短的系列文章中,我们将尝试弄清楚Microsoft解决方案与较熟悉的工具有何不同。



主要特点 


当然,Windows PowerShell主要是带有脚本语言的命令外壳,该脚本语言最初是基于.NET Framework创建的,后来又基于.NET Core。与接受和返回文本数据的外壳不同,Windows PowerShell与具有属性和方法的.NET类一起使用。 PowerShell允许您执行普通命令,还可以访问COM,WMI和ADSI对象。它使用各种存储库(例如文件系统或Windows注册表)进行访问,即所谓的供应商(提供者)。值得注意的是,可以将可执行的PowerShell组件嵌入其他应用程序中以实现各种操作的功能,包括通过图形界面。反之亦然:许多Windows应用程序都通过PowerShell提供对其管理界面的访问。 

Windows PowerShell允许您执行以下操作:

  • 更改操作系统设置;
  • 管理服务和流程;
  • 配置服务器角色和组件;
  • 安装软件
  • 通过特殊界面管理已安装的软件;
  • 将可执行组件嵌入第三方程序中;
  • 创建脚本以自动执行管理任务;
  • 使用文件系统,Windows注册表,证书存储等。

外壳和开发环境


Windows PowerShell有两种方式:除了具有命令外壳的控制台仿真器之外,还有集成的脚本环境(ISE)。要访问命令行界面,只需在Windows菜单中选择适当的快捷方式,或从“运行”菜单中运行powershell.exe。屏幕上会出现一个蓝色窗口,其功能与以前的cmd.exe明显不同。对于Unix系统,命令外壳程序的用户熟悉自动补全和其他功能。



要使用外壳,您需要记住一些按键组合:

  • 上下箭头在历史记录中滚动以重复以前键入的命令;
  • 该行末尾的向右箭头按字母顺序循环使用前一个命令。
  • Ctrl + Home删除从光标位置到行首的键入文本;
  • Ctrl + End删除从光标到行尾的文本。

F7显示带有键入命令的窗口,并允许您选择其中之一。鼠标选择,复制粘贴,光标定位,删除,退格键也可以在控制台中运行-所有这些我们都喜欢。


Windows PowerShell ISE是一个成熟的开发环境,它通过代码编辑器,命令设计器,内置调试器和其他编程功能来支持选项卡和语法突出显示。如果在命令名称之后在开发环境编辑器中编写连字符,则将在下拉列表中获得所有可用参数的类型。您可以通过系统菜单中的快捷方式或使用powershell_ise.exe可执行文件启动PowerShell ISE。


Cmdlet 


在Windows PowerShell中,所谓的cmdlet这些是包含各种功能的专用.NET类。它们根据“动作对象”(或“动词名词”,如果您更喜欢)的原则命名,并且连字符分隔的连接词类似于自然语言句子中的谓词和主语。例如,Get-Help的字面意思是“ Get-Help”,或者在PowerShell中是“ Show-Help”。实际上,这与Unix系统中的man命令类似,并且需要以这种方式请求PowerShell中的手册,而不是通过使用--help或/?键来调用cmdlet。不要忘记在线PowerShell文档:Microsoft对此非常详细。

除了Get之外,cmdlet中还使用了其他动词(严格来说不仅是动词)来指示动作。在下面的列表中,我们提供一些示例:

Add-添加;
Clear-干净;
Enable-启用;
Disable- 关掉;
New- 创建;
Remove-删除;
Set-问;
Start- 跑;
Stop- 停;
Export- 出口;
Import-进口。

有系统cmdlet,用户cmdlet和可选cmdlet:作为执行的结果,它们都返回一个对象或对象数组。它们不区分大小写,即从命令解释器的角度来看,Get-Help和get-help之间没有区别。 “;”字符用于分隔,但是只有在同一行上执行多个cmdlet时才必须设置该字符。 

Windows PowerShell cmdlet分为模块(NetTCPIP,Hyper-V等),并且存在Get-Command cmdlet可以按对象和操作进行搜索。您可以像这样显示帮助:

Get-Help Get-Command



默认情况下,该命令显示简要帮助,但如有必要,会将参数(参数)传递给cmdlet。例如,使用它们,您可以获得详细的(-Detailed参数)或完整的(-Full参数)帮助,并且还显示示例(-Examples参数):

Get-Help Get-Command -Examples

Windows PowerShell中的帮助已使用Update-Help cmdlet更新。如果命令行太长,则可通过编写服务字符``''并按Enter键将cmdlet的参数传递到下一个命令行-只需在一行上完成写命令然后在另一行上继续即可。

以下是一些常见cmdlet的示例: 

Get-Process-显示系统中正在运行的进程;
Get-Service-显示服务及其状态;
Get-Content-显示文件的内容。

对于Windows PowerShell中经常使用的cmdlet和外部实用程序,有简短的同义词-别名(来自英语别名)。例如,dir是Get-ChildItem的别名。同义词列表包含来自Unix系统的命令类似物(ls,ps等),而help-help调用Get-Help cmdlet。可以使用Get-Alias cmdlet查看同义词的完整列表:


PowerShell脚本,功能,模块和语言


Windows PowerShell脚本存储为扩展名为.ps1的纯文本文件。您无法通过双击启动它们:您需要右键单击上下文菜单,然后选择“在PowerShell中运行”项。在控制台中,您将必须指定脚本的完整路径,或者转到适当的目录并写入文件名。运行脚本也受系统策略限制,并且要检查当前设置,可以使用Get-ExecutionPolicy cmdlet,它将提供以下值之一:

Restricted-禁止执行脚本(默认情况下);
AllSigned-仅允许启动由受信任的开发人员签名的脚本;
RemoteSigned-允许运行签名和自定义脚本;
Unrestricted-允许运行任何脚本。

管理员有两个选择。最安全的方法是对脚本进行签名,但这是一个非常严重的巫术-我们将在以下文章中对其进行处理。现在,我们将遵循阻力最小的路径并更改政策:

Set-ExecutionPolicy RemoteSigned


为此,PowerShell将必须以管理员身份运行,尽管您可以使用特殊参数来更改当前用户的策略。

脚本以面向对象的编程语言编写,其命令的命名与先前讨论的cmdlet的原理相同:“ Action-Object”(“动词名词”)。它的主要目的是自动化管理任务,但是它是一种成熟的解释型语言,具有所有必要的构造:条件分支,循环,变量,数组,对象,错误处理等。任何文本编辑器都适合编写脚本,但是启动Windows PowerShell ISE最方便。

您可以将参数传递给脚本,使其成为必需参数,还可以设置默认值。此外,Windows PowerShell允许您创建函数并以与cmdlet相同的方式调用它们:为此,可以使用Function构造和花括号。具有功能的脚本称为模块,扩展名为.psm1。模块必须存储在PowerShell环境变量中定义的目录中。您可以使用以下命令查看它们:

Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize

输送机


在最后一个示例中,我们使用了Unix系统外壳用户熟悉的设计。在Windows PowerShell中,竖线还允许您将一个命令的输出传输到另一个命令的输入,但是管道的实现存在显着差异:这与字符集或某些文本无关。内置cmdlet或用户定义的函数返回对象或对象数组,也可以在输入处接收它们。像Bourne shell及其许多追随者一样,PowerShell通过管道简化了复杂的任务。

管道的最简单示例如下所示:

Get-Service | Sort-Object -property Status


首先,运行Get-Service cmdlet,然后将其接收的所有服务传递到Sort-Object cmdlet,以按Status属性进行排序。管道上一部分的结果传递给哪个参数取决于其类型-通常这是一个InputObject。此问题将在专门针对PowerShell编程语言的文章中详细讨论。 

如果愿意,可以继续执行链并将Sort-Object的结果传递给另一个cmdlet(它们将从左到右执行)。顺便说一句,Windows熟悉的页面输出设计也可用于所有Unixoid: 

Get-Service | Sort-Object -property Status | more

在后台运行任务 


通常,您需要在后台运行某个命令,以免等待在Shell会话中执行该命令的结果。在Windows PowerShell中,有几种针对此情况的cmdlet:

Start-Job-启动后台任务;
Stop-Job-停止后台任务;
Get-Job-查看后台任务列表;
Receive-Job-查看后台任务的结果;
Remove-Job-删除后台任务;
Wait-Job-将后台任务转移回控制台。

要启动后台任务,我们使用Start-Job cmdlet并在大括号中指示一个命令或一组命令:

Start-Job {Get-Service}


可以通过了解Windows PowerShell中的后台任务的名称来对其进行操作。首先,学习如何显示它们:

Get-Job


现在我们显示Job1的结果:

Receive-Job Job1 | more


很简单

远程命令执行


Windows PowerShell使您不仅可以在本地计算机上执行命令和脚本,还可以在远程计算机上甚至在整组计算机上执行命令和脚本。做这件事有很多种方法:

  • 许多cmdlet都有一个参数-ComputerName,但是这种方法将失败,例如,创建管道。
  • 该cmdlet Enter-PSSession允许您在远程计算机上创建交互式会话。 
  • 使用该cmdlet,Invoke-Command可以在一台或多台远程计算机上执行命令或脚本。

PowerShell版本


自2006年首次发布以来,PowerShell发生了很大变化。该工具可用于在不同硬件平台(x86,x86-64,Itanium,ARM)上运行的许多系统:Windows XP,Windows Server 2003,Windows Vista,Windows Server 2008/2008 R2,Windows 7,Windows 8,Windows 8.1,Windows RT,Windows RT 8.1,Windows Server 2012/2012 R2,Windows 10,Windows Server 2016,GNU / Linux和OS X.最新版本6.2已于2018年1月10日发布。为早期版本编写的脚本更有可能在以后的版本中使用,但是反向移植可能会出现问题,因为经过多年的发展,PowerShell中出现了大量新的cmdlet。您可以使用$ PSVersionTable内置变量的PSVersion属性找出计算机上安装的外壳的版本:

$PSVersionTable.PSVersion


您还可以使用cmdlet:

Get-Variable -Name PSVersionTable –ValueOnly


与Get-Host cmdlet相同。实际上,有很多选择,但是要使用它们,您需要学习PowerShell编程语言,这是我们在下一篇文章中将要做的。 

摘要 


Microsoft已成功创建了一个功能强大的命令外壳程序,它具有用于开发脚本的便捷集成环境。它与Windows操作系统以及它们的软件和.NET Core平台的深度集成,与Unix世界中我们熟悉的方法不同。 PowerShell可以称为面向对象的外壳,因为cmdlet和用户定义的函数将返回对象或对象数组,并可以在输入处接收它们。我们认为所有Windows服务器管理员都应该拥有此工具:已经过了没有命令行就可以使用的时间。在运行Windows Server Core的低成本VPS上,特别需要高级控制台外壳,但这是另一回事了。

2: Windows PowerShell
3: ,
4: ,

Source: https://habr.com/ru/post/undefined/


All Articles