当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 欢迎使用 PowerShell 7

作者:精品下载站 日期:2024-12-14 08:09:27 浏览:16 分类:玩电脑

欢迎使用 PowerShell 7


[玩转系统] 欢迎使用 PowerShell 7

PowerShell 7 是 PowerShell Core 和 Windows 内置的 Windows PowerShell 的继任者。本文向您简要概述了主要新功能,并解释了为什么值得更新。

PowerShell 7 - 亮点

PowerShell 7 是 Microsoft 推荐的适用于 Windows 的新 shell 环境。与 Windows PowerShell 不同,最新的 LTS 版本 PowerShell 7 基于 .NET Core 3.1。

这一变化的关键影响是,PowerShell 7 现在可以跨 Windows、Linux 和 MacOS 平台使用,不仅可以在本地使用,还可以在云中和混合基础设施中使用。

此外,.NET Core 3.1 的更新承诺提高性能、与 Windows PowerShell 模块更好的兼容性以及其他新功能,我们将在下文中讨论这些内容。

PowerShell 7 下载和安装

系统要求

与 Windows PowerShell 相比,Windows 安装中默认情况下尚未包含 PowerShell 7,并且 Microsoft 目前不打算删除 Windows 中预安装的 Windows PowerShell。

然而,正如上一段所述,PowerShell 7 是跨平台的,支持 Windows、macOS 和 Linux。根据 Microsoft Docs(截至 2020-07-30),PowerShell 7 目前可用于以下 x64 操作系统

  • Windows 7、8.1 和 10
  • Windows Server 2008 R2、2012、2012 R2、2016 和 2019
    macOS 10.13
  • 红帽企业 Linux (RHEL)/CentOS 7+
  • 软呢帽 29+
  • Debian 9+
  • 乌班图 16.04+
  • openSUSE 15+
  • 阿尔派Linux 3.8+
  • macOS 10.13+

安装

安装 PowerShell 7 的方法有多种。一般来说:由于 PowerShell 自 2016 年起开源,因此可以从 PowerShell GitHub 存储库免费下载安装文件。

下载完成后,只需双击该文件即可安装。

在 Windows 上,还可以通过 Windows PowerShell 中的“Steve Lee One-Liner”执行安装:

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

同样,可以使用以下命令从控制台在 Linux 上安装 PowerShell 7:

sudo wget https://aka.ms/install-powershell.sh; sudobash install-powershell.sh; rminstall-powershell.sh

有关 Windows 和 Linux 上相应过程的详细信息,请参阅 Microsoft 高级云倡导者 Thomas Maurer 的博客。

在 Windows 上使用 PowerShell 7

2017 年底,微软支持宣布 PowerShell 将取代命令提示符作为文件资源管理器的命令 shell。

当然,您还可以将 PowerShell 7 与适用于 Windows 10 的新 Windows 终端结合使用。如果需要,您甚至可以并行使用 PowerShell 和命令提示符:默认情况下,Windows 终端使用 PowerShell 7,但您可以可以在选项卡中并行打开 Windows PowerShell、命令提示符、Azure Cloud Shell 和任何远程 shell (winrm/ssh)。如果您在 Windows 中安装了适用于 Linux 的 Windows 子系统,您甚至可以包含 Unix shell。

在 Linux 上使用 PowerShell 7

正如“系统要求”部分中已经描述的,PowerShell 7 正式支持许多 Linux 发行版,以及一些,例如 Arch Linux, KaliRaspbian,由社区支持。

这些平台的集成不仅为现有的 PowerShell 用户带来了优势,他们现在可以将其专业知识转移到新的基础设施中。它还为 Linux 用户(分别是 Bash 用户)带来了优势,他们现在还可以在 PowerShell 中使用对象而不仅仅是字符串。

值得注意的是,SSH 是 Linux 计算机的 PowerShell 7 远程管理的关键组件,因为它可以在 Windows 和 Linux 计算机之间实现真正的 PowerShell 远程处理。

PowerShell 7 与 Windows PowerShell

兼容性

PowerShell 7 包含许多新的 cmdlet 和运算符,并且仅删除了少数 cmdlet,例如 WMI cmdlet。但是,并非所有 Windows PowerShell 模块都与新 shell 兼容。在这种情况下,Windows 仍然允许您并行使用 Windows PowerShell(如前文所述)。

您可以使用 Get-Module -ListAvailable 命令显示可与 PowerShell 7 一起使用的所有本地可用模块的列表(图 1)。

[玩转系统] 欢迎使用 PowerShell 7

图 1:输出 PowerShell 模块以与 PowerShell 7 一起使用

有关 Microsoft 发布的本机与 PowerShell 7 配合使用或与 PowerShell 7 兼容的模块的概述,请参阅在线兼容性列表。

Windows 用户还可以使用带有 -UseWindowsPowerShell 参数的Import-Module cmdlet。此命令使您可以更轻松地切换到 PowerShell 7,并使您能够继续使用 Windows PowerShell 模块。该参数在 PowerShell 7 中创建一个代理模块,该模块使用本地 Windows PowerShell 进程隐式运行该模块中包含的所有 cmdlet。

当然,并非所有针对 Windows 优化的 cmdlet 在 Linux 和 macOS 版本中都可用。但同样,微软也在不断进行改进。但是,您可以预期 Linux 和 macOS 肯定永远不会拥有与 Windows 相同的 cmdlet 集。

差异

下表概述了 Windows PowerShell 和 PowerShell 7 之间的基本差异。

PowerShell 7 中的新功能

基于 SSH 的 PowerShell 远程处理

Powershell 7 最重要的新功能之一无疑是引入 SSH 作为 PowerShell 远程处理的网络协议。 SSH 远程处理适用于所有平台,从而实现真正的多平台 PowerShell 远程处理。

作为此更改的一部分,还向 New-PSSessionEnter-PSSessionInvoke- 添加了一组支持 SSH 远程连接的新参数。命令 cmdlet:

[-HostName ] [-UserName ] [-KeyFilePath ]


三元运算符“a ?乙:丙”

新的三元运算符 a a ? b : c 允许您制定简化的“if-else”语句。

语法如下:

[condition] ? [if-true] : [if-false]

[condition] 代表要计算的条件表达式。该评估的结果被转换为布尔值。这又决定了序列中执行哪个表达式。一个简单的例子。我们要检查等式 10*5=20 是 true还是 false

$total = 10*5 -eq 20 ? 'yes' : 'no'

另一个例子,我们要检查所使用的系统是 MacOS、Linux 还是其他系统(Windows)。

# PowerShell 7 
$IsMacOS? 'You are on a Mac' : $IsLinux? 'You are on Linux' : 'You must be on Windows’ 
# Windows PowerShell 
If ($IsMacOS) { 'You are on a Mac' } elseif ($IsLinux) { 'You are on Linux' } else { 'You must be on Windows' }


管道链运营商 && 和 ||

可以与 | 一起使用的管道函数我们从一开始就认识到 PowerShell 相对于旧命令提示符的巨大优势。它允许串联多个命令来执行常见操作(可以说是“迷你脚本”)。

从 PowerShell 7 开始,可以有条件地将多个管道链接在一起。为此,PowerShell 7 提供了管道链运算符 &&||。两个运算符的作用是管道的各个部分仅在特定条件下执行。

两个运算符之间的区别在于,当您使用&&时,仅当管道的左侧部分未返回错误时才会执行管道的右侧部分(“当前一个没有返回错误时执行”)。示例:

Write-Output 'Hello' && Write-Output 'World'
# Output 
Hello World

在上面的示例中,管道的两个部分都执行没有错误

相反,当使用 || 时,仅当管道左侧部分的命令返回错误时才执行管道右侧部分(“仅当前一个返回错误时才执行”) .示例:

Write-Output 'Hello' || Write-Output 'World'
# Output Hello

在第二个示例中,管道的左侧部分执行时没有错误,因此管道的右侧部分未执行

另一个例子:

Get-Process notepad -ErrorAction SilentlyContinue || "Notepad process is not available"

如果记事本正在运行,则会显示有关该进程的信息,如果没有运行,则会显示文本“记事本进程不可用”(图 2)。

[玩转系统] 欢迎使用 PowerShell 7

图 2:链接的 PowerShell 管道的输出

有关 PowerShell 7 中新管道链运算符的详细说明,请参阅 Microsoft 文档。

NULL 条件运算符:??和??=

与新的管道链运算符类似,新的 NULL 条件运算符用于执行条件查询:

NULL 合并运算符 ?? 如果左操作数不为 NULL,则返回其值。否则,它将计算正确的操作数并返回其结果。示例:应检查 $x 是否为 NULL。

# $x is assigned the value $null 
$x = $null

# the new operator ?? is used to check whether the left operand $x is NULL 
$x ?? 100 

# since this is true, the right operand "100" is evaluated and its result is returned 
100

如果左操作数的计算结果为 NULL,NULL 赋值运算符 ??= 将右操作数的值赋给左操作数。示例:如果 $x 为 NULL,则应为其分配值“100”。

# $x is assigned the value $null 
$x = $null 

# now ??= is used to check whether the left operand $x is NULL 
$x ??= 100 

# since this is true, the right operand "100" is evaluated and its result is assigned to the left operand 
$x
100


ForEach-Object - 并行功能

Foreach-Object 命令以前只允许对输入对象集合顺序执行操作。管道中对象的并行处理只能通过使用PSWorkflow Cmdlt 来实现。

通过新的 -Parallel 参数集,PowerShell 现在在 ForEach-Object 循环中提供此选项:

ForEach-Object
		[-InputObject ]
		-Parallel 
		[-ThrottleLimit ]
		[-TimeoutSeconds ]
		[-AsJob]
		[-WhatIf]
		[-Confirm]
		[]

ThrottleLimit 参数可用于限制并行处理的线程数量,以确保处理器核心不会过载。

对于不需要处理能力时涉及较长等待时间的脚本块,设置比可用处理器核心数更高的 ThrottleLimit 很有用。

应该注意的是,多线程本身会产生一些开销,因为必须为并行执行的每个脚本块创建单独的运行空间。因此,此过程仅适用于较长的计算密集型操作。

以下是可能用例的示例:应通过 Test-NetConnection 命令查询多个端口。在第一部分中,ForEach-object 循环按顺序处理:

# Sequential processing
Measure-Command { 
		$port = '53','80','88','443' 
		$port | ForEach-Object { 
				Test-NetConnection -ComputerName 172.30.5.10 -Port $_
		}
} | Select-Object Minutes,Seconds

如图3所示,该操作顺序执行的持续时间为1分44秒。

[玩转系统] 欢迎使用 PowerShell 7

图 3:Windows PowerShell 中 ForEach-Object 循环的顺序处理

第二部分,在PowerShell 7中进行操作,并添加参数-Parallel:

# Parallel processing
Measure-Command {
		$port = '53','80','88','443'
		$port | ForEach-Object -Parallel {
				Test-NetConnection -ComputerName 172.30.5.10 -Port $_ 
		}
} | Select-Object Minutes,Seconds

如图4所示,该操作的并行处理持续时间仅为15秒。

[玩转系统] 欢迎使用 PowerShell 7

图 4:PowerShell 7 中 ForEach-Object 循环的并行处理

我们在网络研讨会“使用 PowerShell 7 成功实现自动化”中展示了更多并行处理的使用案例

PowerShell 7 中的错误处理:ConciseView 和 Get-Error Cmdlet

PowerShell 7 向 $ErrorView 变量添加了新选项,以使错误消息的显示更加用户友好:除了现有视图(NormalView 和 CategoryView)之外,

此外,新的Get-Error cmdlet提供了错误的全面详细视图,包括异常、堆栈跟踪等。

结论

上述功能只是 PowerShell 7 新增功能的一小部分示例。下面的链接集合提供了一些资源,您可以使用这些资源来了解最新版本。

了解最重要的新功能的另一种方法是参加 ScriptRunner 网络研讨会“使用 PowerShell 7 成功实现自动化”,您不仅可以了解 PowerShell 7 的其他新功能和使用场景,还可以了解如何在 ScriptRunner 中使用它们。

相关内容

  • PowerShell |一次自动化世界...... - PowerShell 团队的官方博客
  • GitHub - PowerShell/PowerShell 7:适用于每个系统的 PowerShell!
  • PowerShell 7 文档 |微软文档
  • 网络研讨会:使用 PowerShell 7 成功实现自动化

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯