什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

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

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

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

主要特点 

当然,Windows PowerShell 主要是一个脚本 shell,最初构建在 .NET Framework 上,后来构建在 .NET Core 上。 与接受和返回文本数据的 shell 不同,Windows PowerShell 使用具有属性和方法的 .NET 类。 PowerShell 允许您运行常见命令,还允许您访问 COM、WMI 和 ADSI 对象。 它使用各种存储(例如文件系统或 Windows 注册表)来访问所谓的。 提供商。 值得注意的是,可以在其他应用程序中嵌入 PowerShell 可执行组件来实现各种操作,包括。 通过图形界面。 反之亦然:许多 Windows 应用程序通过 PowerShell 提供对其管理界面的访问。 

Windows PowerShell 允许您:

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

Shell和开发环境

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

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

要使用 shell,您需要记住一些键盘快捷键:

  • 向上和向下箭头滚动历史记录以重复以前键入的命令;
  • 行尾的右箭头逐个字符地重新输入上一个命令;
  • Ctrl+Home 删除从光标位置到行首键入的文本;
  • Ctrl+End 删除从光标到行尾的文本。

F7 显示一个包含键入命令的窗口,并允许您选择其中之一。 该控制台还可以使用鼠标进行文本选择、复制粘贴、光标定位、删除、退格——一切我们喜欢的。

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
Windows PowerShell ISE 是一个完整的开发环境,具有选项卡式和语法突出显示的代码编辑器、命令生成器、内置调试器和其他编程乐趣。 如果您在开发环境编辑器中的命令名称后添加连字符,您将在下拉列表中获得所有可用选项以及类型指示。 您可以通过系统菜单中的快捷方式或使用可执行文件 powershell_ise.exe 启动 PowerShell ISE。

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

cmdlet 

在 Windows PowerShell 中,即所谓的。 cmdlet。 这些是提供各种功能的专用 .NET 类。 它们被命名为动作-宾语(或者动词-名词,如果您愿意的话),连字符分隔的链接类似于自然语言句子中的谓语和主语。 例如,Get-Help 字面意思是“Get-Help”,或者在 PowerShell 上下文中:“Show-Help”。 事实上,这类似于 Unix 系统中的 man 命令,并且必须以这种方式请求 PowerShell 中的手册,而不是通过使用 --help 或 /? 键调用 cmdlet。不要忘记在线 PowerShell 文档:微软已经说得很详细了。

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

Add - 添加;
Clear - 清除;
Enable - 打开;
Disable - 关掉;
New - 创造;
Remove - 删除;
Set - 问;
Start - 跑步;
Stop - 停止;
Export - 出口;
Import - 进口。

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

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

Get-Help Get-Command

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

默认情况下,该命令显示简短的帮助,但参数(参数)会根据需要传递给 cmdlet。 例如,在他们的帮助下,您可以获得详细(参数 -Detailed)或完整(参数 -Full)帮助,以及显示示例(参数 -Examples):

Get-Help Get-Command -Examples

Windows PowerShell 中的帮助由 Update-Help cmdlet 更新。 如果命令行太长,可以通过写入服务字符“`”并按 Enter 键将 cmdlet 参数移动到下一行 - 仅在一行上完成命令写入并继续在另一行上是行不通的。

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

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

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

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

脚本、函数、模块和 PowerShell 语言

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

Restricted — 启动脚本被禁用(默认情况下);
AllSigned - 只允许启动由受信任的开发人员签名的脚本;
RemoteSigned - 允许运行签名的和自己的脚本;
Unrestricted - 允许运行任何脚本。

管理员有两个选择。 最安全的方法是签署脚本,但这是一个相当严重的巫术 - 我们将在以后的文章中处理它。 现在让我们采取阻力最小的路径并改变策略:

Set-ExecutionPolicy RemoteSigned

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
尽管您可以使用特殊设置更改当前用户的策略,但需要以管理员身份运行 PowerShell 才能执行此操作。

脚本是用面向对象的编程语言编写的,其命令的命名原则与前面考虑的 cmdlet 相同:“动作-对象”(“动词-名词”)。 它的主要目的是自动化管理任务,但它是一种成熟的解释语言,具有所有必要的结构:条件跳转、循环、变量、数组、对象、错误处理等。 任何文本编辑器都适合编写脚本,但最好运行 Windows PowerShell ISE。

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

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

输送机

在上一个示例中,我们使用了 Unix shell 用户熟悉的构造。 在 Windows PowerShell 中,竖线还允许您将一个命令的输出传递到另一个命令的输入,但管道的实现存在显着差异:我们不再讨论一组字符或某种类型的字符。文本。 内置 cmdlet 或用户定义的函数返回对象或对象数组,并且还可以接收它们作为输入。 与 Bourne shell 及其许多后继者一样,PowerShell 通过管道使复杂的任务变得更加容易。

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

Get-Service | Sort-Object -property Status

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
首先,执行 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?它与什么一起使用? 第 1 部分:主要特性
Windows PowerShell 中的后台任务可以通过了解其名称来进行操作。 首先,让我们学习如何显示它们:

Get-Job

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
现在让我们展示作业 Job1 的结果:

Receive-Job Job1 | more

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
一切都很简单。

远程命令执行

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 于 10 年 2018 月 XNUMX 日发布。 为早期版本编写的脚本可能适用于更高版本,但向后移植可能会出现问题,因为 PowerShell 在多年的开发过程中引入了大量新的 cmdlet。 您可以使用 $PSVersionTable 内置变量的 PSVersion 属性找出计算机上安装的命令 shell 的版本:

$PSVersionTable.PSVersion

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
您还可以使用 cmdlet:

Get-Variable -Name PSVersionTable –ValueOnly

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性
使用 Get-Host cmdlet 也可以完成相同的操作。 事实上,有很多选择,但要使用它们,您需要学习 PowerShell 编程语言,我们将在 下一篇

结果 

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

什么是 Windows PowerShell?它与什么一起使用? 第 1 部分:主要特性

只有注册用户才能参与调查。 登录拜托

该系列的下一篇文章应首先讨论哪些主题?

  • 53,2%在 PowerShell 中编程123

  • 42,4%PowerShell98函数和模块

  • 22,1%如何签署自己的脚本?51

  • 12,1%通过提供商(providers)使用存储库28

  • 57,6%使用 PowerShell 自动化计算机管理133

  • 30,7%软件管理和在第三方产品中嵌入 PowerShell 可执行文件71

231 位用户投票。 37 位用户弃权。

来源: habr.com

添加评论