[玩转系统] 什么是 PowerShell 以及为什么使用它?
作者:精品下载站 日期:2024-12-14 13:07:10 浏览:13 分类:玩电脑
什么是 PowerShell 以及为什么使用它?
许多技术专业人员忍受重复性任务,并通过点击方法来管理事物,而通过自动化可以节省大量时间。 PowerShell(Microsoft 的 shell 和脚本语言)可以提供帮助。 PowerShell 到底是什么?
最简单的形式是,PowerShell 是一种跨平台 shell 和脚本语言,允许人们从命令行管理任务并自动执行数千项活动。它是一种基于 Microsoft .NET Framework 构建的语言,使我们的生活变得更加轻松。
在本文中,您将了解 PowerShell、它的来源、PowerShell 基础知识,并帮助您了解为什么 PowerShell 可能是合适的工具。
我们有数百篇有关 PowerShell 的博客文章。如果您不熟悉这种语言,请查看我们在这里发布的所有其他帖子。
什么是 PowerShell?
PowerShell 是一种基于 Microsoft .NET 技术构建的开源 shell 和脚本语言。它旨在帮助非软件开发人员的技术专业人员构建高效的脚本和工具,以帮助他们更好地完成工作。
PowerShell 从 VBScript 和批处理文件等语言发展而来,旨在提供易于理解和使用的一流命令行界面和脚本语言。
PowerShell 是面向对象的,并且严重依赖于类似于面向对象编程 (OOP) 的对象。 PowerShell 中的几乎所有内容都是对象,您很快就会了解更多。
PowerShell 是两件事;它是一个命令行 shell,允许用户在类似于旧命令提示符 (cmd.exe) 的命令行中运行命令。它也是一种强大的脚本语言,可以构建工具并自动化您能想到的任何东西。
PowerShell 可以交互运行或在脚本中运行,它提供了许多称为 cmdlet 和函数的命令。这些命令要么是编译的二进制文件,要么是用户编写的自定义代码,用于封装特定任务,例如读取文件、ping 远程计算机等。
PowerShell 的演变
2002 年,微软的 Jeffrey Snover 意识到 Windows 不像其竞争对手 Linux 那样具有良好的命令行界面和脚本编写能力。为了改变这一点,Snover 发布了 Monad 宣言,该文件概述了他对最终的 PowerShell 的计划。
从 2002 年到 2005 年,PowerShell 被称为 Monad,仍处于早期开发阶段。 2006年,随着PowerShell 1.0的发布,“PowerShell”这个词首次亮相。从那时起,Microsoft 的 PowerShell 团队就以该宣言为指导,不断向 PowerShell 添加新功能。
PowerShell 最初仅作为 Windows 管理框架的一部分提供,在 Windows XP 和 Windows Server 2012 之前,PowerShell 是单独安装的。但从 Windows 7 和 Windows Server 2012 R2 开始,PowerShell 已默认安装在所有 Windows 操作系统上。
转向跨平台
从 2006 年到 2016 年,PowerShell 仅在 Windows 上可用,称为 Windows PowerShell,最高版本为 5.1。 PowerShell 构建于 .NET Framework 之上,该框架仅在 Windows 中可用。 2016 年,微软决定采取大胆举措,在 GitHub 上开源 PowerShell,在第六版中放弃了“Windows”而只使用“PowerShell”。
从那时起,PowerShell 不仅可以在 Windows 上使用,还可以在 macOS、Linux 和其他使用 .NET Core 的 *nix 操作系统上使用。
PowerShell/PowerShell Core 向后兼容 Windows PowerShell。两个版本都可以并排安装。
PowerShell 的未来
截至 2021 年,PowerShell 已经取得了最大的发展成果。为了实现 Monad 宣言的目标,Microsoft 的 PowerShell 团队负责管理该产品。尽管大多数(如果不是全部)突破性功能已经发布,但微软和开源社区仍在积极维护它。
命令
与 cmd.exe、Bash 等其他 shell 非常相似,PowerShell 具有执行某些操作的二进制命令。例如,您可以运行命令来读取文件、ping 计算机、删除注册表项等等。
PowerShell 7 是最新版本,它附带了 1500 多个称为 cmdlet 的已编译二进制文件。 PowerShell cmdlet 无处不在,构成了可用于构建复杂脚本的工具。
与软件开发人员使用 C# 等其他语言构建的 cmdlet 不同,普通人可以创建自己的命令。内置 PowerShell 语言的函数允许那些了解 PowerShell 的人创建类似于 cmdlet 的命令。
开发人员使用这些 cmdlet 和函数构建简单到复杂的解决方案,以自动化您能想到的任何事情。
使用 Get-Command
cmdlet 来发现系统上的所有可用命令。
命令语法
PowerShell 的独特部分之一是语法。 PowerShell 的语法可供 IT 专业人员执行时读取。
与其他 shell 不同,这些命令遵循标准命名约定,准确指示命令的用途。
命令名称以动词-名词语法命名,始终以动词开头,后跟破折号和名词。
尽管 PowerShell 不要求您对自定义函数使用动词-名词语法,但 Microsoft 强烈鼓励这样做。
动词
cmdlet 名称中最重要的部分是动词。此部分应准确描述 cmdlet 执行的操作。例如,Get-Content
从文件中获取文本,而Copy-Item
则复制文件。您甚至可以通过在 PowerShell 控制台中运行 Get-Verb
命令来查找所有“已批准”的动词,如下所示。
名词
与动词不同,PowerShell 没有任何“批准”的名词。对其执行操作的对象可能有很大差异。但是,PowerShell 确实将引擎内部的动词与名词分开。您可以通过使用 Noun
参数运行 Get-Command
命令来查看此示例。
通过指定 Noun
参数并提供值 A*
。 PowerShell 会将其所有可用命令“拆分”为动词和名词,并且仅显示带有以 A 开头的名词的命令。
模块
在上一节中,您看到了 Get-Command
命令的输出。在该输出中,您可以看到名为 Source
的列。为了划分命令,PowerShell 要求所有 cmdlet 都成为“存储桶”或模块的一部分。
模块是基于公共功能组合的命令组。例如,许多核心 PowerShell cmdlet 位于名为 Microsoft.PowerShell.Management 的模块中,而诸如 Write-Host
和 Write-Debug
之类的 cmdlet 则位于名为 Microsoft.PowerShell.Management 的模块中。 Microsoft.PowerShell.Utility 模块。
PowerShell 预装了几十个模块,但您也可以根据任务或产品下载数千个其他模块。您可以找到用于管理其他供应商产品的模块,甚至可以创建自己的产品。
您可以通过运行Get-Module -ListAvailable
来查找计算机上安装的所有模块。 Get-Module
命令查找所有已加载(导入到当前会话中)的模块。 ListAvailable
参数告诉 Get-Module
还搜索安装在文件系统上但未导入的模块。
使用 Find-Module
命令搜索 PowerShell 库以发现数千个其他模块。
对象
一旦您熟悉了 PowerShell,您需要学习的最重要的方面之一就是对象。 PowerShell 中的所有内容都是具有属性和方法的对象。
要了解 PowerShell,您必须首先了解对象的工作原理。
现实世界的物体
想象一个现实世界的“对象”。让我们和猫一起工作吧。猫是一种具有各种属性(属性)的物体,如颜色、大小、年龄等,这些属性定义了猫的特征。
每只猫都是一个具有描述它的某些属性的对象。这些属性就是属性。
现在,猫不再是某种不可移动的物体。它会做一些事情,比如跑、跳、眨眼睛或发出咕噜声。猫(物体)执行某些动作。在 PowerShell 中,cat 对象具有各种方法,可以采取行动做某事。
对象类型
使用上面的猫例子,每只猫都是猫。但狗也是一个物体。我们现在有两种类型的对象。在编程中,这些不同的对象称为类型。 类型是一种具有一组通用属性和方法的特定对象。
猫是一种类型,狗是一种类型,汽车也是一种类型。每个对象都有一组特定的属性和它可以执行的操作。
对象属性和方法
如果可以将猫视为具有属性和方法的对象,那么如何在代码中表示它?为了解释这一点,我们首先从一种常见的对象类型——字符串开始。
如果您在控制台中输入以下文本并按 Enter 键,它会将值返回给您,但更多操作会在后台发生。
"This is a Plain Text, and its an object"
当您按键盘上的 Enter 时,PowerShell 会创建一个对象,特别是类型为 System.String 的对象。该字符串对象具有各种“成员”,这是 PowerShell 对所有属性和方法的术语。
您可以通过将字符串的输出通过管道(稍后会详细介绍)到 Get-Member
cmdlet 来查看分配给该字符串对象的所有成员。 Get-Member
cmdlet 是一个检查 PowerShell 对象的便捷命令。
Length
是字符串的一个属性,指示字符串的长度。您可以使用点表示法引用属性的值,如下所示。
"This is a Plain Text, and its an object".Length
可以看到PowerShell返回的值为39
,说明这个脚本存在39字符问题。
您可以以类似的方式引用对象上的方法。但是,方法要求您使用括号,而不仅仅是一组字母数字字符。
有些方法有参数。要将这些参数传递给方法,您可以将它们包含在括号中。
字符串对象有一个名为 Upper()
的方法,该方法将字符串中的所有字符大写,如下所示。
"This is a Plain Text, and its an object".ToUpper()
在 Microsoft.com 网站上了解有关 Get-Member、属性和方法的更多信息
PS驱动器
该外壳的一个独特功能是 PSDrive 的概念。 PowerShell 驱动器或 PSDrive 是您通常使用的“驱动器”,例如 C:\,但有所不同。典型的 C:\ 是一个文件系统驱动器,由其中包含文件的文件夹组成。 PSDrive 可以是这样的,但也可以是注册表配置单元、Active Directory 或证书容器。
PSDrive 提供了对实际数据源的抽象,并允许您分层导航多种类型的数据。使用 Get-PSDrive
cmdlet 查找计算机上的所有可用驱动器。
PowerShell 有一组带有名词 Item
、ChildItem
和 ItemProperty
的 cmdlet。这些 cmdlet 均适用于任何 PSDrive。
例如,要读取注册表配置单元,您可以运行 Get-ChildItem -Path HKLM:\
或者您可能想查找文件的属性。为此,您可以使用 Get-ItemProperty -Path C:\file.txt
。
错误处理
与所有其他编程语言一样,PowerShell 也支持错误处理或异常处理。使用 .NET 错误处理(例如 try
、catch
和旧版 trap
命令),您可以捕获脚本中发生的异常。
不过,与其他语言不同的是,PowerShell 有硬和软终止错误的概念。硬终止错误被认为比软终止错误“更糟糕”。根据开发人员创建 cmdlet 的方式,cmdlet 可能会根据各种情况返回软终止错误或硬终止错误。
例如,也许您需要读取 C:\NonExistingFile.txt 中的文本文件内容,但该文件不存在。默认情况下,如果文件不存在,Get-Content
将返回软终止错误。软终止错误不会向 catch
块抛出异常。
软终止错误只是将错误返回到控制台并退出,如下所示。
Try{
Get-Content -Path "C:\NonExistingFile.txt"
} Catch{
Write-Host "I Found An Error And Caught It.. " -ForegroundColor Yellow
}
所有 PowerShell cmdlet 都带有一个名为 ErrorAction
的参数,用于覆盖默认 cmdlet 行为。也许我希望 PowerShell 在找不到文件时进入我的 catch
块。为此,Get-Content
需要返回异常或硬终止错误。
要将 cmdlet 引用的软终止错误“转换”为硬终止错误,请将 Stop
值与 ErrorAction
参数结合使用,如下所示。
Try{
Get-Content -Path "C:\NonExistingFile.txt" -ErrorAction Stop
} Catch{
Write-Host "I Found An Error And Caught It.. " -ForegroundColor Yellow
}
管道
当您在任何 shell 中运行命令时,该命令可以选择返回输出。在 Bash 和其他 shell 脚本语言中,该输出是一个简单的字符串。与 PowerShell 不同,该字符串不是一个不包含任何其他属性的对象。
由于 PowerShell 仅返回对象,因此它有一个管道来支持它们。管道的概念并不独特,但通过它传递对象却是独特的。
例如,也许您正在运行 Mozilla Firefox 浏览器,该浏览器在名为 firefox 的进程下运行。 PowerShell 有一个名为 Get-Process
的内置 cmdlet,用于发现正在运行的进程。
Get-Process firefox
PowerShell 还有一个名为 Stop-Process
的 cmdlet,用于停止正在运行的进程。在传统的 shell 中,您必须执行类似的操作,占用两行代码并增加额外的复杂性。
$process = Get-Process firefox
Stop-Process $process
但是,由于 Stop-Process
cmdlet 通过管道接受输入,因此它具有了解该进程适用于 Firefox 的逻辑,并且可以停止该进程,如下所示。
# Find a process named Firefox and pass it to the Stop-Process command, which ends it
Get-Process firefox | Stop-Process
管道允许您将任意数量的命令串在一起,只要命令接受管道输入即可。
远程通讯
PowerShell 不仅仅局限于安装它的计算机。它可以轻松地在远程计算机上运行命令。为此,它使用 PowerShell 远程处理 (PSRemoting)。 PSRemoting 是一种连接到远程计算机并像本地计算机一样执行命令的功能。
例如,也许您想停止本地计算机上的 Windows 更新服务。您可以使用 Stop-Service -Name wuauserv
来做到这一点。
要在远程计算机上运行相同的命令,请将该命令“包装”在脚本块中,并将该脚本块传递给 Invoke-Command
命令。
Invoke-Command -ComputerName SRV -Scriptblock { Stop-Service -Name wuauserv }
PowerShell 还具有其他相关的远程通信命令,例如 Test-Connection
和 Test-NetConnection
,用于在远程计算机上执行 ping 操作、发现端口状态以及运行跟踪路由。
Test-NetConnection -ComputerName www.google.com -Port 80
结论
PowerShell 是一款出色的工具,可以帮助 IT 专业人员、系统管理员、开发人员或任何其他管理计算机系统的人。它是一个应该成为每个人的工具带的工具,通过其基本命令与社区模块以及创建自己的脚本的能力相结合。
要了解更多信息,请在此处查看其他人在 PowerShell 上的所有帖子并开始自动化!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag