面向初学者的 PowerShell 教程:学习 PowerShell 脚本
什么是 PowerShell?
Windows PowerShell 是一个面向对象的自动化引擎和脚本语言。它主要为 IT 专业人员和系统管理员设计,用于控制和自动化 Windows 操作系统和其他应用程序的管理。它提供了引人入胜的新概念,以扩展您在 Windows 命令提示符和 Windows 脚本宿主环境中获得的知识和创建的脚本。
它结合了脚本的灵活性、命令行速度以及图形用户界面(GUI)管理工具的强大功能。通过帮助系统管理员消除未来手动劳动的时间,它可以让您高效地解决问题。我们将介绍学习 PowerShell 所需了解的所有重要方面。
这是一份完整的 PowerShell 脚本基础指南……让我们开始吧!
为什么使用 PowerShell?
这里有一些使用 PowerShell 的重要原因
- PowerShell 为操作系统提供了高度集成的命令行体验
- PowerShell 允许完全访问 .NET 框架中的所有类型
- 深受系统管理员信赖。
- PowerShell 是操作服务器和工作站组件的简单方法
- 它通过创建更简单的语法来面向系统管理员
- PowerShell 比运行 VBScript 或其他脚本语言更安全
PowerShell 历史
PowerShell 的第一个版本 1.0 于 2006 年发布。如今,PowerShell 已更新到 7.2 版本。随着时间的推移和版本的更新,PowerShell 的功能和托管环境得到了显著的增长。
让我们看看 PowerShell 的版本历史
- PowerShell 版本 1 支持对 Windows Server 2003 的本地管理
- PowerShell 2.0 集成了 Windows 7 和 Windows Server 2008 R2。此版本支持远程处理,并增强了 PowerShell 的功能,如事务、后台作业、事件、调试等。
- PowerShell 3.0 作为 Windows 管理框架的内部组件发布。它安装在 Windows 8 和 Windows Server 2012 上。您可以添加和计划作业、会话连接、自动模块加载等。
- PowerShell 4.0 随 Windows 8.1 和 Windows Server 2012 R2 一起发布。此版本增加了对所需状态配置、增强的调试、网络诊断的支持。
- PowerShell 5.0 作为 Windows 管理框架 5 的内部组件发布。此版本提供的功能包括远程调试、类定义、.NET 枚举等。
- PowerShell 7.2 发布。它基于 .NET 6.0 构建。此版本提供了新的运算符、简化且动态的错误视图、自动新版本通知等。
在本次 Powershell 脚本教程中,接下来我们将学习 PowerShell 的特性。
PowerShell 的特性
- PowerShell 远程处理:PowerShell 允许在远程计算机上调用脚本和 cmdlet。
- 后台作业:它帮助您异步调用脚本或管道。您可以将作业运行在本地计算机或多台远程计算机上。
- 事务:启用 cmdlet 并允许开发人员执行
- Evening: 此命令帮助您监听、转发和处理管理及系统事件。
- 网络文件传输:PowerShell 提供对通过后台智能传输服务 (BITS) 技术在计算机之间进行优先、异步、节流的文件传输的原生支持。
如何启动 PowerShell
现在,在本 Powershell 脚本教程中,我们将学习如何在 Windows 操作系统上启动 Powershell。
PowerShell 已预装在所有最新版本的 Windows 中。我们需要启动 PowerShell,为此我们需要按照以下步骤操作
步骤 1)在 Windows 中搜索 PowerShell。选择并单击
步骤 2)Power Shell 窗口打开
PowerShell Cmdlet
Cmdlet,也称为 Command let,是一种在基于 Windows 的 PowerShell 环境中使用的轻量级命令。PowerShell 在命令提示符中调用这些 cmdlet。您可以使用 PowerShell API 创建和调用 cmdlet 命令。
Cmdlet 与命令
Cmdlet 在以下方面与其他命令 shell 环境中的命令不同?
- Cmdlet 是 .NET Framework 类对象,不能单独执行
- Cmdlet 可以仅用十几行代码构建
- Cmdlet 不处理解析、输出格式化和错误呈现
- Cmdlet 处理基于对象。因此,文本流和对象不能作为输出传递给管道。
- Cmdlet 是基于记录的,因此它一次处理一个对象。
PowerShell 的大部分功能来自 Cmdlet,它们始终采用动词-名词格式,而不是复数。此外,Cmdlet 返回的是对象而不是文本。Cmdlet 是一系列命令,超过一行,存储在扩展名为 .ps1 的文本文件中。
Cmdlet 总是由一个动词和一个名词组成,用连字符分隔。供您学习 PowerShell 的一些动词是
- Get — 获取某物
- Start — 运行某物
- Out — 输出某物
- Stop — 停止正在运行的某物
- Set — 定义某物
- New — 创建某物
PowerShell 命令
以下是重要的 PowerShell 命令列表
Get-Help: 关于 PowerShell 命令和主题的帮助
示例:显示有关 Format-Table 命令的帮助信息
Get-Help Format-Table
Get-Command: 获取有关任何可调用项的信息
Powershell 脚本示例:生成计算机上安装的 cmdlet 和函数的列表
Get-Command
Get-Service: 查找包含“service”一词的所有 cmdlet。
示例:获取所有以“vm”开头的服务
Get-Service "vm*"
Get-Member: 显示可以使用对象做什么
示例:获取 vm 进程的成员。
Get-Service "vm*" | Get-Member
其他命令
- Get Module 显示命令包
- Get Content 此 cmdlet 可以接受文件并处理其内容并对其进行操作。
- Get-get 查找所有以“get-”开头的 cmdlet。
示例:创建文件夹
New-Item -Path 'X:\Guru99' -ItemType Directory
输出
Powershell 数据类型
特殊变量
特殊变量 | 描述 |
---|---|
$Error | 显示最近错误的错误对象数组 |
$Host | 显示当前宿主应用程序的名称 |
$Profile | 存储默认 shell 的用户配置文件的完整路径 |
$PID | 存储进程标识符 |
$PSUICulture | 它保存当前 UI 区域的名称。 |
$NULL | 包含空值或 NULL 值。 |
$False | 包含 FALSE 值 |
$True | 包含 TRUE 值 |
PowerShell 脚本
PowerShell 脚本存储在 .ps1 文件中。默认情况下,您无法通过双击文件来运行脚本。这可以保护您的系统免受意外损坏。要执行脚本
步骤 1:右键单击它,然后单击“使用 PowerShell 运行”。
此外,还有一项策略限制脚本执行。您可以通过运行 Get-ExecutionPolicy 命令来查看此策略。
您将获得以下输出之一
- Restricted— 不允许运行任何脚本。这是默认设置,因此当您第一次运行命令时会显示此设置。
- AllSigned— 您可以运行由受信任的开发人员签名的脚本。借助此设置,脚本会在执行前询问您是否要运行它。
- RemoteSigned— 您可以运行您自己的或由受信任的开发人员签名的脚本。
- Unrestricted— 您可以运行任何您想运行的脚本
更改执行策略的步骤
步骤 1)打开一个提升的 PowerShell 提示符。右键单击 PowerShell,然后选择“以管理员身份运行”。
步骤 2)输入以下命令
- Get-ExecutionPolicy
- Set-executionpolicy unrestricted
- 在提示符处输入 Y
- Get-ExecutionPolicy
第一个 PowerShell 脚本
在记事本中编写以下命令
Write-Host "Hello, Guru99!"
PowerShell 脚本的扩展名为 ps1。将文件保存为 FirstScript.ps1
在 Powershell 中,使用以下命令调用脚本
& "X:\FirstScript.ps1"
什么是 PowerShell ISE?
Windows PowerShell 集成脚本环境 (ISE) 是 Windows PowerShell 的默认编辑器。在此 ISE 中,您可以在基于窗口的 GUI 环境中运行命令、编写测试和调试脚本。您可以进行多行编辑、语法着色、选项卡完成、选择性执行以及许多其他操作。
Windows PowerShell ISE 还允许您在控制台窗格中运行命令。但是,它还支持您可以用来同时查看脚本的源代码以及可以插入 ISE 的其他工具的窗格。
您甚至可以同时打开多个脚本窗口。当您调试使用其他脚本或模块中定义的函数的脚本时,这特别有用。
我们在记事本中创建的同一个脚本,也可以在 ISE 中创建
- 将代码粘贴到编辑器中
- 保存脚本
- 使用 F5 运行脚本
- 在控制台中观察输出
示例 2
以下代码将显示您计算机上的可用虚拟内存
Get-WmiObject -Class Win32_OperatingSystem –ComputerName localhost | Select-Object -Property CSName,FreeVirtualMemory
PowerShell 概念
现在,在本 Powershell 入门教程中,我们将学习重要的 Powershell 概念
Cmdlets | Cmdlet 是用 VB 或 C# 等 .net 语言编写的内置命令。它允许开发人员通过加载和编写 PowerShell snap-ins 来扩展 cmdlet 的集合。 |
函数 | 函数是使用 PowerShell 语言编写的命令。可以在不使用 Visual Studio 和 dev 等其他 IDE 的情况下进行开发。 |
脚本 | 脚本是磁盘上的文本文件,扩展名为 .ps1 |
Applications | Applications 是现有的 Windows 程序。 |
What if | 告诉 cmdlet 不要执行,而是告诉你 cmdlet 运行时会发生什么。 |
Confirm | 指示 cmdlet 在执行命令之前进行提示。 |
Verbose | 提供更详细的信息。 |
调试 | 指示 cmdlet 提供调试信息。 |
ErrorAction | 指示 cmdlet 在发生错误时执行特定操作。允许的操作包括继续、停止、静默继续和询问。 |
ErrorVariable | 它指定用于保存错误信息的变量。 |
OutVariable | 告诉 cmdlet 使用特定变量来保存输出信息 |
OutBuffer | 指示 cmdlet 在调用管道中的下一个 cmdlet 之前将特定数量的对象保存在缓冲区中。 |
使用 PowerShell 脚本的优点
- PowerShell 脚本功能强大,可以用更少的行完成许多工作。
- 变量的声明形式为 $<variable>
- 变量可用于保存命令输出、对象和值。
- 不需要指定变量的“类型”。
PowerShell 与命令提示符
PowerShell | 命令提示符 |
---|---|
PowerShell 与 Windows OS 深度集成。它提供交互式命令行界面和脚本语言。 | 命令提示符是 Microsoft 提供的默认命令行界面。它是一个简单的 win32 应用程序,可以与 Windows 操作系统中的任何 win32 对象进行交互和通信。 |
PowerShell 使用称为 cmdlet 的东西。它可以在运行时环境或自动化脚本中调用。 | 命令提示符不提供此类功能。 |
PowerShell 将它们视为对象。因此,输出可以通过管道作为输入传递给其他 cmdlet。 | Command Prompt 甚至 *nix shell,从 cmdlet 生成的输出不仅仅是文本流,而是对象的集合。 |
PowerShell 在功能、能力和内部功能方面非常先进。 | 命令提示符非常基础。 |
PowerShell 的应用
如今,PowerShell 已成为 IT 管理员的理想选择,因为它简化了大型企业网络中的管理操作和工作。例如,假设您正在管理一个包含四百多台服务器的大型网络。现在您想实施一项新的安全解决方案。此安全解决方案取决于需要在这些服务器上运行的某个服务。
您当然可以登录到每台服务器并查看它们是否安装并运行了该服务。但是,由于您的员工需要花费大量时间在这些非生产性流程上,因此这无疑会带来许多人为错误。
但是,如果您使用 PowerShell,您可以在几分钟内完成此任务。这是因为整个操作都是通过一个脚本完成的,该脚本收集有关服务器上运行的服务的信息。
摘要
- Windows PowerShell 是面向对象的自动化引擎和脚本语言
- PowerShell 为操作系统提供了高度集成的命令行体验
- PowerShell 的第一个版本 1.0 于 2006 年发布
- PowerShell 允许在远程计算机上调用脚本和 cmdlet
- PowerShell 已预装在所有最新版本的 Windows 中
- Cmdlet 是在基于 Windows 的 PowerShell 环境中使用的轻量级命令
- Get、Start、Out、Stop、Set、New 是重要的 PowerShell 命令
- Boolean、Byte、Char、Decimal、Decimal、Long 是 PowerShell 的重要数据类型
- $Error、$Host、$Profile、$PID、$PSUICulture、$NULL 是 PowerShell 使用的一些特殊变量
- Windows PowerShell 集成脚本环境 (ISE) 是 PowerShell 的默认编辑器
- PowerShell 与 Windows OS 深度集成,而命令提示符是 Microsoft 提供的默认命令行界面
- PowerShell 已成为 IT 管理员的理想选择,因为它简化了大型企业网络中的管理操作和工作