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

[玩转系统] PowerShell 入门

作者:精品下载站 日期:2024-12-14 03:06:05 浏览:13 分类:玩电脑

PowerShell 入门


本章重点介绍如何查找和启动 PowerShell,以及解决新用户在使用 PowerShell 时遇到的最初痛点。在您的实验室环境计算机上按照本章中的示例进行操作。

什么是 PowerShell?

Windows PowerShell 是一种易于使用的命令行 shell 和脚本环境,用于自动执行基于 Windows 的系统的管理任务。 Windows PowerShell 预装在所有现代版本的 Windows 操作系统上。

在哪里可以找到 PowerShell

在 Windows 11 上查找 PowerShell 的最简单方法是在搜索栏中输入 PowerShell,如图 1-1 所示。请注意,Windows PowerShell 有四种不同的快捷方式。

[玩转系统] PowerShell 入门

64 位版本 Windows 上的 Windows PowerShell 快捷方式:

  • Windows PowerShell
  • Windows PowerShell ISE
  • Windows PowerShell (x86)
  • Windows PowerShell ISE (x86)

在 64 位版本的 Windows 上,您拥有 64 位版本的 Windows PowerShell 控制台和 Windows PowerShell 集成脚本环境 (ISE),以及每一个版本的 32 位版本,如 (x86) 后缀所示快捷方式。

笔记

Windows 11 仅作为 64 位操作系统提供。 Windows 11 没有 32 位版本。但是,Windows 11 包含 32 位版本的 Windows PowerShell 和 Windows PowerShell ISE。

如果您运行的是旧版 32 位版本的 Windows,则只有两个快捷方式。这些快捷方式没有 (x86) 后缀,而是 32 位版本。

如果您运行的是 64 位操作系统,我建议您使用 64 位版本的 Windows PowerShell,除非您有特定原因需要使用 32 位版本。

根据您运行的 Windows 11 版本,Windows PowerShell 可能会在 Windows 终端中打开。

Microsoft 不再更新 PowerShell ISE。 ISE 仅适用于 Windows PowerShell 5.1。带有 PowerShell 扩展的 Visual Studio Code (VS Code) 可与两个版本的 PowerShell 配合使用。 Windows 中不附带 VS Code 和 PowerShell 扩展。在创建 PowerShell 脚本的计算机上安装 VS Code 和扩展。您无需在运行 PowerShell 的所有计算机上安装它们。

如何启动 PowerShell

我在我支持的生产环境中使用三个不同的 Active Directory 用户帐户。我在本书中使用的实验室环境中镜像了这些帐户。我以没有域或本地管理员权限的域用户身份登录 Windows 11 计算机。

单击Windows PowerShell快捷方式启动PowerShell控制台,如图1-1所示。请注意,控制台的标题栏显示“Windows PowerShell”,如图 1-2 所示。

[玩转系统] PowerShell 入门

当您以普通用户身份运行 PowerShell 时,某些命令可以正常运行。但是,PowerShell 不参与用户访问控制 (UAC)。这意味着它无法提示提升需要管理员批准的任务。

笔记

UAC 是一项 Windows 安全功能,有助于防止恶意代码以提升的权限运行。

以普通用户身份登录时,当您运行需要提升权限的命令时,PowerShell 会返回错误。例如,停止 Windows 服务:

Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand

解决方案是以本地管理员用户身份运行提升的 PowerShell。这就是我配置第二个域用户帐户的方式。遵循最小权限原则,此帐户不应是域管理员或在域中具有任何提升的权限。

要以提升的权限启动 PowerShell,请右键单击 Windows PowerShell 快捷方式,然后选择以管理员身份运行,如图 1-3 所示。

[玩转系统] PowerShell 入门

Windows 会提示您输入凭据,因为您以普通用户身份登录 Windows。输入作为本地管理员的域用户的凭据,如图 1-4 所示。

[玩转系统] PowerShell 入门

请注意,提升的控制台窗口的标题栏显示管理员:Windows PowerShell,如图 1-5 所示。

[玩转系统] PowerShell 入门

现在,您以管理员身份运行提升的 PowerShell,当您运行需要提升的命令时,UAC 不再是问题。

这很重要

您应该仅在绝对必要时以管理员身份运行 PowerShell。

当您以远程计算机为目标时,无需运行提升的 PowerShell。运行提升的 PowerShell 仅影响针对本地计算机运行的命令。

您可以简化查找和启动 PowerShell 的过程。将 PowerShell 或 Windows 终端快捷方式固定到任务栏。再次搜索 PowerShell,只不过这次右键单击它并选择固定到任务栏,如图 1-6 所示。

[玩转系统] PowerShell 入门

这很重要

本书的原始版本于 2017 年发布,建议将快捷方式固定到任务栏,以便在每次启动 PowerShell 时自动启动提升的实例。但是,由于潜在的安全问题,我不再推荐它。从 PowerShell 提升的实例启动的任何应用程序也会绕过 UAC 并提升运行。例如,如果您从提升的 PowerShell 实例启动 Web 浏览器,则您访问的任何包含恶意代码的网站也会提升运行。

当您需要以提升的权限运行 PowerShell 时,请右键单击固定在任务栏上的 PowerShell 快捷方式,同时按 Shift。选择以管理员身份运行,如图1-7所示。

[玩转系统] PowerShell 入门

确定您的 PowerShell 版本

PowerShell 中有自动变量来存储状态信息。这些变量之一是 $PSVersionTable,其中包含有关 PowerShell 会话的版本信息。

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

如果您运行的 Windows PowerShell 版本早于 5.1,则应更新您的 Windows 版本。 Windows PowerShell 5.1 预安装在当前支持的 Windows 版本上。

PowerShell 版本 7 并不是 Windows PowerShell 5.1 的替代品;而是 Windows PowerShell 5.1 的替代品。它与 Windows PowerShell 并行安装。 Windows PowerShell 版本 5.1 和 PowerShell 版本 7 是两种不同的产品。有关 Windows PowerShell 版本 5.1 和 PowerShell 版本 7 之间差异的详细信息,请参阅从 Windows PowerShell 5.1 迁移到 PowerShell 7。

有用的提示

PowerShell 版本 6(以前称为 PowerShell Core)不再受支持。

执行政策

PowerShell 执行策略控制可以运行 PowerShell 脚本的条件。 PowerShell 中的执行策略是一项安全功能,旨在帮助防止恶意脚本的无意执行。但是,它不是安全边界,因为它无法阻止确定的用户故意运行脚本。坚定的用户可以绕过 PowerShell 中的执行策略。

您可以为本地计算机、当前用户或 PowerShell 会话设置执行策略。您还可以使用组策略为用户和计算机设置执行策略。

下表显示了当前 Windows 操作系统的默认执行策略。

Windows Server 2022

远程签名

Windows Server 2019

远程签名

Windows Server 2016

远程签名

Windows 11

受限制的

Windows 10

受限制的

无论执行策略设置如何,您都可以交互运行任何 PowerShell 命令。执行策略仅影响脚本中运行的命令。使用 Get-ExecutionPolicy cmdlet 确定当前执行策略设置。

检查计算机上的执行策略设置。

Get-ExecutionPolicy
Restricted

列出所有范围的执行策略设置。

Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

所有 Windows 客户端操作系统的默认执行策略设置都是Restricted。您无法使用Restricted执行策略设置运行PowerShell脚本。要测试执行策略,请将以下代码保存为名为 Get-TimeService.ps1.ps1 文件。

有用的提示

PowerShell 脚本是一个纯文本文件,其中包含要运行的命令。 PowerShell 脚本文件使用 .ps1 文件扩展名。要创建 PowerShell 脚本,请使用 Visual Studio Code (VS Code) 等代码编辑器或记事本等任何文本编辑器。

当您以交互方式运行以下命令时,它会完成且不会出现错误。

Get-Service -Name W32Time

但是,当您从脚本运行相同的命令时,PowerShell 会返回错误。

.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

当您在 PowerShell 中运行生成错误的命令时,请在重试该命令之前阅读错误消息。请注意,错误消息告诉您命令失败的原因:

...此系统上禁用运行脚本。

要启用脚本的执行,请使用 Set-ExecutionPolicy cmdlet 更改执行策略。当您未指定 Scope 参数时,LocalMachine 是默认范围。您必须以管理员身份运行提升的 PowerShell 才能更改本地计算机的执行策略。除非您对脚本进行签名,否则我建议使用 RemoteSigned 执行策略。 RemoteSigned 可防止您运行未经受信任发布者签名的下载脚本。

在更改执行策略之前,请阅读 about_Execution_Policies 帮助文章以了解安全影响。

将计算机上的执行策略设置更改为 RemoteSigned

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

如果您已成功更改执行策略,PowerShell 将显示以下警告:

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks
described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the
execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "N"):y

如果您没有以管理员身份运行 PowerShell,PowerShell 将返回以下错误消息:

Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy],
   UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
   PowerShell.Commands.SetExecutionPolicyCommand

还可以更改当前用户的执行策略,而无需您以管理员身份运行提升的 PowerShell。如果您成功将本地计算机的执行策略设置为RemoteSigned,则无需执行此步骤。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

将执行策略设置为 RemoteSigned 后,Get-TimeService.ps1 脚本成功运行。

.\Get-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Running  W32Time            Windows Time

概括

在本章中,您了解了在哪里可以找到以及如何启动 PowerShell。您还了解了如何确定 PowerShell 的版本以及执行策略的目的。

审查

  1. 如何确定计算机正在运行哪个 PowerShell 版本?
  2. 何时应以管理员身份启动提升的 PowerShell?
  3. Windows 客户端计算机上的默认执行策略是什么?它会阻止您执行哪些操作?
  4. 如何确定当前的 PowerShell 执行策略设置?
  5. 如何更改 PowerShell 执行策略?

参考

要了解有关本章所涵盖概念的更多信息,请阅读以下 PowerShell 帮助文章。

  • about_Automatic_Variables
  • about_Execution_Policies

后续步骤

在下一章中,您将了解 PowerShell 中命令的可发现性。您还将了解如何下载 PowerShell 的帮助文件,以便可以在 PowerShell 会话中查看帮助。

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

取消回复欢迎 发表评论:

关灯