声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
Powershell简介
PowerShell 是一个由微软开发的命令行外壳(Command Shell)和脚本语言,它结合了传统命令行工具的功能与现代编程语言的特性。最初用于系统管理和自动化任务,PowerShell 现在已经发展为跨平台的开发工具,广泛应用于 Windows、Linux 和 macOS 系统中。
1. PowerShell 的基础概念
- 命令行外壳(Shell):PowerShell 可以在命令行界面中执行命令,就像传统的命令提示符(CMD)或 Linux Shell(Bash)一样。它提供了比传统 Shell 更强大的功能,如管道(Pipes)、对象操作和更复杂的脚本功能。
- 对象管道(Pipelines):与传统的命令行不同,PowerShell 不仅传递文本数据,还可以在管道中传递对象。例如,你可以从一个命令获取一个对象,然后将它传递到下一个命令来进一步处理。对象的特性(属性和方法)会随着管道流动。
- cmdlet:PowerShell 命令通常是小型的单功能命令,称为 cmdlet(命令-let)。cmdlet 通常以动词-名词的命名约定命名,例如 Get-Process、Set-Item、New-Object 等。
- 脚本(Script):PowerShell 也支持编写脚本,这些脚本文件通常以 .ps1 为扩展名。脚本可以包含多个 cmdlet,并能够进行控制流(如条件判断、循环等)和错误处理。
2. PowerShell 的关键功能
(1) 管道操作:
PowerShell 允许你通过管道将一个命令的输出传递给另一个命令。例如,Get-Process | Where-Object {$_.CPU -gt 100} 会列出 CPU 使用量超过 100 的进程。管道的强大之处在于可以处理对象而不仅仅是字符串。
(2) 对象操作:
传统的命令行 Shell 主要处理文本输出,而 PowerShell 的输出是 .NET 对象。这使得用户可以直接访问对象的属性和方法。例如,使用 Get-Process 获取的进程对象可以直接访问 Name、CPU、Id 等属性,而不需要解析文本。
(3) 远程管理:
PowerShell 提供了强大的远程管理功能。通过 PowerShell Remoting,用户可以在远程计算机上执行命令。通过 Enter-PSSession 或 Invoke-Command 等 cmdlet,管理员可以在多个计算机上同时执行命令。
(4) 模块(Modules):
PowerShell 支持模块化的功能扩展。模块是一组 cmdlet、函数、变量和其他资源的集合,用户可以使用 Import-Module 加载这些模块,从而扩展 PowerShell 的功能。微软和其他开发者发布了大量的 PowerShell 模块来简化管理任务,如 Azure、AWS 等云平台的管理模块。
(5) 集成开发环境(IDE):
PowerShell 可以与许多编辑器和开发环境集成。最常用的开发环境是 Visual Studio Code (VS Code),通过安装 PowerShell 插件,用户可以获得语法高亮、调试、代码补全等功能,增强脚本编写和调试的体验。
(6) 自动化:
PowerShell 适用于系统管理和自动化任务。管理员可以编写 PowerShell 脚本来自动化常见任务,比如批量管理文件、创建用户、配置系统服务等。它对于 DevOps、持续集成/持续部署(CI/CD)和云管理等场景非常有用。
(7) 错误处理:
PowerShell 提供了强大的错误处理机制。用户可以使用 try, catch, finally 语句来捕获和处理错误,增强脚本的稳定性和健壮性。
try {
# 尝试执行代码
$result = Get-Item "C:\Path\To\File"
}
catch {
# 捕获错误
Write-Error "文件未找到"
}
finally {
# 无论是否发生错误都会执行
Write-Output "清理工作"
}
(8) 命令别名(Alias):
PowerShell 支持命令别名,用户可以为常用命令创建快捷方式。例如,可以使用 ls(列出目录内容)代替 Get-ChildItem,使用 cat(显示文件内容)代替 Get-Content,这些别名与 Unix/Linux Shell 类似。
3. PowerShell 的跨平台支持
自 PowerShell 7 起,PowerShell 成为开源的,并且能够跨平台运行。用户可以在 Windows、Linux 和 macOS 上安装和运行 PowerShell。Microsoft 通过 PowerShell Core 实现了这一点,支持多种操作系统,并通过 GitHub 上的开源项目持续维护和更新。
4. PowerShell 的用例
- 系统管理:管理员可以通过 PowerShell 执行一系列的系统管理任务,如创建和管理用户、服务、文件权限、网络配置等。
- 自动化任务:PowerShell 是一种强大的自动化工具,能够帮助管理员自动执行重复性的任务。
- 配置管理:PowerShell 可以用于配置管理工具,如 Puppet、Chef、Ansible 等,可以在多个系统中一致地配置环境。
- 安全性与合规性:通过 PowerShell 脚本,管理员可以执行安全审核、合规性检查,生成日志和报告等。
5. PowerShell 与其他技术的集成
- Active Directory:PowerShell 提供了丰富的 cmdlet 来管理 Active Directory,例如创建用户、修改用户属性、管理组等。
- Exchange Server 和 Office 365:PowerShell 被广泛应用于 Exchange Server 和 Office 365 管理中,提供了脚本化的方式来批量处理邮件账户、群组等。
- Azure 和 AWS:PowerShell 为 Azure 和 AWS 提供了官方模块,可以用来管理云资源、自动化云操作。
6. PowerShell 脚本示例
- 获取系统信息:
Get-ComputerInfo
- 列出所有运行中的进程:
Get-Process
- 获取某个文件夹下的文件并按大小排序:
Get-ChildItem "C:\Path\To\Folder" | Sort-Object Length
- 创建一个新用户:
New-LocalUser -Name "TestUser" -FullName "Test User" -Password (ConvertTo-SecureString "password" -AsPlainText -Force)
- 远程执行命令:
Invoke-Command -ComputerName "RemotePC" -ScriptBlock { Get-Process }
一,认识使用powershell
1,两种进入powershell的方法
(1),输入win+r输入powershell
(2),输入win+r输入cmd,然后在cmd命令行界面输入powershell
2,通过输出环境变量的形式来查看powershell的版本
$psversiontable
3,powershell强大的功能,比如计算1GB/1TB/1PB有多大
以及各种数学运算功能
4,PowerShell 的命令(cmdlet)遵循一种标准的命名约定:动词 + 名词。这种命名规则旨在确保 cmdlet 的名称具有一致性和可读性,便于用户理解和使用。命名约定的核心目标是让 PowerShell 命令尽可能简洁明了。
动词 + 名词 命名规则
- 动词:表示操作的行为或动作,通常是 PowerShell cmdlet 执行的主要任务。例如:Get、Set、New、Remove 等。
- 名词:表示被操作的对象或资源,描述了 cmdlet 作用的目标。例如:Process(进程)、Item(项)、User(用户)等。
例子
常见的动词 + 名词 cmdlet 示例:
- Get-Process:获取当前运行的进程
- Get(动词)表示获取数据,Process(名词)表示要操作的对象是进程。
- Set-Item:设置项目(如设置文件或注册表项的值)
- Set(动词)表示设置,Item(名词)表示操作的对象是某个项目(如文件或注册表项)。
- New-Object:创建一个新的对象
- New(动词)表示创建,Object(名词)表示目标是一个对象。
- Remove-Item:删除一个项目
- Remove(动词)表示删除,Item(名词)表示要删除的对象是某个项目。
- Stop-Service:停止服务
- Stop(动词)表示停止,Service(名词)表示操作的对象是服务。
- Get-Help:获取帮助信息
- Get(动词)表示获取,Help(名词)表示获取的是帮助信息。
- Add-Content:向文件添加内容
- Add(动词)表示添加,Content(名词)表示要添加的内容是文件内容。
动词的常见分类
PowerShell 中有一组标准的动词,它们通常代表了对资源的常见操作。以下是一些常见的动词类别:
- 获取类动词:
- Get:获取信息,检索某个对象或状态。
- Find:查找,搜索符合条件的对象。
- 设置类动词:
- Set:设置对象的属性或状态。
- Add:向对象中添加元素或项。
- Remove:从对象中移除元素或项。
- Clear:清空对象的内容。
- 创建类动词:
- New:创建新的对象、资源或项。
- 删除类动词:
- Remove:删除对象或项。
- Stop:停止正在运行的服务或进程。
- 测试类动词:
- Test:测试某个条件或状态。
- Compare:比较两个对象或状态。
- 修改类动词:
- Set:设置对象的属性。
- Enable:启用某个功能或对象。
- Disable:禁用某个功能或对象。
例子分析
- Get-ChildItem:
- Get(动词)表示获取,ChildItem(名词)表示获取子项(如文件和文件夹)。这个 cmdlet 获取指定路径下的所有子项。
- Set-ExecutionPolicy:
- Set(动词)表示设置,ExecutionPolicy(名词)表示设置执行策略。这个 cmdlet 用来设置 PowerShell 脚本的执行策略。
- Start-Process:
- Start(动词)表示启动,Process(名词)表示启动一个新的进程。
- Get-Content:
- Get(动词)表示获取,Content(名词)表示获取内容。这个 cmdlet 用来读取文件内容。
标准动词列表
微软为 PowerShell cmdlet 设计了一个标准的动词列表,以下是一些标准动词及其含义:
动词 | 说明 |
Get | 获取对象或数据 |
Set | 设置对象或数据 |
New | 创建新对象 |
Remove | 删除对象或数据 |
Add | 向对象中添加元素 |
Clear | 清空对象的数据 |
Test | 测试对象的状态 |
Start | 启动某个进程或服务 |
Stop | 停止某个进程或服务 |
Enable | 启用某个功能或服务 |
Disable | 禁用某个功能或服务 |
Invoke | 执行某个动作或命令 |
Compare | 比较两个对象或数据 |
Export | 导出数据 |
Import | 导入数据 |
你可以通过 Get-Command cmdlet 查看 PowerShell 中的所有命令及其对应的动词和名词。例如:
Get-Command | Select-Object Name
get-service查看启动的服务
Powershell的面对对象思想
PowerShell 作为一个强大的命令行和脚本语言,具有面向对象的思想(Object-Oriented Programming,简称 OOP),这种特性使得它不仅仅是一个简单的命令行工具,而是一个功能强大的自动化平台,能够处理复杂的数据结构和任务。虽然 PowerShell 主要用于系统管理和脚本编写,但它深入集成了面向对象的概念,使得用户能够方便地操作对象、调用方法和处理属性。
1. 对象是 PowerShell 的核心
在 PowerShell 中,所有的命令(cmdlet)几乎都处理和返回对象,而不是纯文本数据。与传统的命令行工具不同,PowerShell 不仅仅返回文本信息,而是通过对象来传递数据。对象是包含数据和行为的实体,具有属性(attributes)和方法(methods)。这种面向对象的方式使得 PowerShell 更加灵活和强大,特别是在进行复杂操作时。
举个例子:
当你运行 Get-Process 命令时,返回的不仅是进程列表的文本,而是包含了所有进程信息的对象。例如:
$processes = Get-Process
此时,$processes 变量保存的是一个对象集合,每个对象代表一个进程,它们包含有关该进程的各种信息,如 Id、Name、CPU 等属性。
2. 对象的属性和方法
PowerShell 对象不仅有数据(属性),还可以包含行为(方法)。这些方法可以操作对象的状态或执行任务。
- 属性(Properties):对象的属性是数据的存储。每个对象都可以有多个属性,表示对象的不同方面。例如,进程对象可能包含 Id(进程 ID)、Name(进程名称)和 CPU(CPU 使用率)等属性。
- 方法(Methods):方法是对象能够执行的操作,它们是对象的行为。例如,你可以调用对象的 Kill() 方法来终止一个进程,或者使用 Start() 方法启动某个服务。
示例:
$process = Get-Process -Name "notepad"
$process.Id # 访问进程的 Id 属性
$process.Kill() # 调用进程的 Kill 方法来结束进程
3. 管道中的对象
PowerShell 的管道(|)是其独特的功能之一。传统的命令行工具会把输出作为文本流向下一个命令,而 PowerShell 会将对象传递到管道中。这意味着,管道不仅传递数据,还可以传递完整的对象,接收方可以直接操作这些对象的属性和方法。
例如:
Get-Process | Where-Object {$_.CPU -gt 100}
这条命令会返回所有 CPU 使用率超过 100 的进程。在这里,Get-Process 返回的是进程对象,然后 Where-Object 过滤出符合条件的对象。对象通过管道传递,$_ 表示管道中的当前对象。
4. PowerShell 支持面向对象编程的特性
(1) 类与对象
从 PowerShell 5.0 开始,PowerShell 引入了对自定义类的支持,允许用户定义自己的类,并创建这些类的实例。你可以定义类的属性、方法、构造函数和静态方法等。这使得 PowerShell 成为一种更接近传统面向对象编程语言的工具。
class Person {
[string]$Name
[int]$Age
Person([string]$name, [int]$age) {
$this.Name = $name
$this.Age = $age
}
[void]SayHello() {
Write-Host "Hello, my name is $($this.Name) and I am $($this.Age) years old."
}
}
# 创建 Person 类的对象
$person = [Person]::new("Alice", 30)
$person.SayHello()
在上面的示例中,Person 类有两个属性 Name 和 Age,还有一个方法 SayHello()。我们可以创建 Person 类的实例,并调用其方法。
(2) 继承与多态
PowerShell 也支持继承,可以在类中继承父类的属性和方法。虽然 PowerShell 的继承机制相对简单,但它可以让开发者复用代码,并为更复杂的任务提供灵活性。
class Employee : Person {
[string]$JobTitle
Employee([string]$name, [int]$age, [string]$jobTitle) : base($name, $age) {
$this.JobTitle = $jobTitle
}
[void]SayJobTitle() {
Write-Host "I work as a $($this.JobTitle)."
}
}
# 创建 Employee 类的对象
$employee = [Employee]::new("Bob", 40, "Software Engineer")
$employee.SayHello()
$employee.SayJobTitle()
在这个示例中,Employee 类继承自 Person 类,并且通过 base 调用了父类的构造函数。Employee 类还有一个额外的属性 JobTitle 和一个方法 SayJobTitle()。
(3) 静态方法和属性
PowerShell 还支持静态方法和属性,可以直接通过类来访问,而无需创建类的实例。
class MathUtils {
[int] static Add([int]$a, [int]$b) {
return $a + $b
}
}
# 使用静态方法
$sum = [MathUtils]::Add(10, 20)
Write-Host "The sum is: $sum"
5. 与 .NET 对象的集成
PowerShell 可以与 .NET 库深度集成,几乎所有的 .NET 类和对象都可以在 PowerShell 中使用。例如,你可以直接创建 .NET 类型的对象,并调用其方法和属性。
# 创建 .NET DateTime 对象
$date = [System.DateTime]::Now
Write-Host "Current Date and Time: $date"
# 使用 .NET 的 StringBuilder 类
$sb = New-Object System.Text.StringBuilder
$sb.Append("Hello, ").Append("PowerShell!") | Out-String
Write-Host $sb.ToString()
6. 面向对象的优势
- 灵活性:PowerShell 中的对象操作可以使你处理各种复杂的数据结构和任务,比如管理系统资源、访问 Web 服务或进行数据库操作。
- 代码重用:通过定义类和方法,可以复用代码,减少重复劳动,提高开发效率。
- 集成性:PowerShell 强大的面向对象特性使得它能够与 .NET 框架、外部库和其他编程语言无缝集成。
.NET开发框架
.NET 是由微软开发和维护的一套跨平台开发框架,最初设计用于 Windows 应用开发,但现在已发展为一个支持多种操作系统和设备的开源平台。它为开发者提供了一组丰富的工具、库和运行时,旨在简化和加速应用程序的开发、部署和运行。
1. .NET 的发展历程
- .NET Framework:最初于 2002 年发布,是专门为 Windows 平台设计的。它包括了 CLR(公共语言运行时)和 BCL(基础类库),为开发者提供了一个统一的编程环境。
- .NET Core:在 2016 年,微软发布了 .NET Core,这是一个开源的、跨平台的版本,支持 Windows、Linux 和 macOS。它允许开发者在多平台上开发和运行应用程序。
- .NET 5 和以后的版本:自 2020 年起,微软决定将 .NET Framework 和 .NET Core 合并为一个统一的平台,从 .NET 5 开始,所有的 .NET 版本都称为 ".NET"(没有框架、核心的区分)。每个新版本都保持开源,支持跨平台开发,并不断增强性能和功能。
2. .NET 的关键组件
(1) 公共语言运行时(CLR)
CLR 是 .NET 的核心,负责执行 .NET 程序。它类似于 Java 的 JVM(Java Virtual Machine),提供了内存管理、垃圾回收、线程管理、安全性等服务。CLR 使得开发者可以用多种语言(如 C#、F#、Visual Basic 等)编写应用,并且这些语言可以互相操作,互相调用。
(2) 基础类库(BCL)
BCL 是 .NET 提供的一套核心类库,包含了各种数据类型、文件 I/O、数据库访问、网络通信、加密等常见功能。BCL 提供了开发人员构建应用所需的大部分常见功能。
(3) 跨平台支持(.NET Core / .NET 5 及以后)
从 .NET Core 开始,.NET 提供了跨平台支持,能够在 Windows、Linux 和 macOS 等操作系统上运行应用程序。随着 .NET 5 及以后的版本,跨平台支持得到了进一步的增强,使得开发者可以在任何操作系统上进行开发并运行应用。
(4) ASP.NET
ASP.NET 是用于构建 Web 应用程序和服务的框架。它支持 MVC(Model-View-Controller)架构、Web API、Razor 页面、Blazor 等。ASP.NET Core 是其跨平台版本,可以在 Windows、Linux 和 macOS 上运行。
(5) Entity Framework
Entity Framework(简称 EF)是 .NET 的对象关系映射(ORM)框架,用于简化数据库操作。它允许开发者使用 C# 代码操作数据库,而不必编写大量的 SQL 查询。
(6) Xamarin / MAUI
- Xamarin:用于开发跨平台的移动应用(iOS 和 Android)。通过 Xamarin,开发者可以使用 C# 编写一次代码,然后在多个平台上运行。
- MAUI (Multi-platform App UI):MAUI 是对 Xamarin 的扩展,旨在简化跨平台应用程序的开发。它支持 Android、iOS、Windows 和 macOS 等多个平台。
(7) NuGet
NuGet 是 .NET 的包管理系统,允许开发者将第三方库和工具集成到自己的项目中。通过 NuGet,开发者可以轻松地安装、更新和管理依赖项。
3. .NET 语言
.NET 支持多种编程语言,主要包括:
- C#:C# 是 .NET 中最流行的编程语言,是一种现代化的、类型安全的、面向对象的编程语言。它被广泛用于开发桌面应用、Web 应用、移动应用、游戏开发等。
- F#:F# 是一种函数式编程语言,也支持面向对象和命令式编程。它非常适合数据处理、并行计算等领域。
- Visual Basic (VB.NET):Visual Basic 是一种易于学习的编程语言,主要用于 Windows 应用的开发。尽管它的使用量有所下降,但仍然被一些开发者用于快速开发和桌面应用程序。
- 其他语言:除了上述语言,.NET 还支持多种其他语言,如 IronPython(Python 的 .NET 实现)和 IronRuby(Ruby 的 .NET 实现)等。
4. .NET 平台的功能
(1) 跨平台开发
.NET 提供跨平台支持,使得开发者可以在 Windows、Linux 和 macOS 等操作系统上构建应用程序并运行它们。借助 .NET Core 和 .NET 5 及以后版本的支持,开发者可以用统一的代码库开发不同平台的应用。
(2) 高性能
.NET 是一个高性能的框架,特别是在 ASP.NET Core 和 .NET 5 及以后版本中,性能得到了显著提升。通过优化内存管理、垃圾回收机制以及 JIT 编译等技术,.NET 能够在多个场景下提供出色的性能。
(3) 云原生开发
.NET 与云原生开发非常契合,特别是与 Microsoft 的 Azure 云平台的深度集成。通过使用 .NET,开发者可以构建微服务架构、容器化应用、无服务器计算(serverless)等现代云应用。
(4) 统一的开发体验
.NET 提供统一的开发工具链,包括开发环境、构建工具和调试工具。Visual Studio 和 Visual Studio Code 都提供对 .NET 的支持,提供完整的代码编辑、调试、测试和部署功能。
(5) 现代化的 Web 开发
通过 ASP.NET Core,.NET 提供了现代化的 Web 开发框架,支持 RESTful API、WebSocket、SignalR 等技术,还支持前端框架如 Blazor,这使得 .NET 在 Web 开发中占有一席之地。
(6) 大规模应用开发
.NET 的企业级支持使它成为开发大规模、复杂应用的理想平台。无论是 Web 应用、桌面应用,还是分布式系统,.NET 都提供了完善的支持和工具。
5. .NET 的生态系统
.NET 的生态系统非常广泛,开发者可以利用以下资源来提高开发效率:
- NuGet:.NET 的包管理系统,可以用来管理第三方库、工具和资源。
- Visual Studio:微软官方的集成开发环境(IDE),为 .NET 开发提供全面支持,具有智能代码提示、调试、测试等强大功能。
- Azure:微软的云平台,支持多种 .NET 应用的部署和管理。
- GitHub:微软在 GitHub 上维护了大量的开源项目,开发者可以利用这些项目加速开发进程。
6. .NET 与其他平台的对比
- 与 Java 的对比:
- .NET 和 Java 都是面向对象的编程平台,都支持跨平台开发。Java 主要通过 JVM(Java 虚拟机)支持跨平台,而 .NET 则是通过 CLR 和 .NET Core 支持多平台。
- .NET 在 Windows 平台上具有更好的集成,特别是与 Microsoft 的工具和服务(如 SQL Server、Azure)集成更紧密。
- 与 Node.js 的对比:
- Node.js 是基于 JavaScript 的平台,主要用于构建高并发的网络应用。与 .NET 相比,Node.js 在处理 I/O 密集型应用时表现更好,而 .NET 的性能通常优于计算密集型任务。
- .NET 提供了更多的语言选择(如 C#、F#、VB.NET),而 Node.js 主要集中在 JavaScript 和 TypeScript 上。
总结
.NET 是一个强大且灵活的跨平台开发框架,支持多种语言和平台,适用于开发各种类型的应用,包括 Web 应用、桌面应用、移动应用、游戏和云应用等。通过提供统一的工具链和良好的性能,.NET 已成为现代开发者的首选平台之一,特别是对于开发 Windows 和企业级应用程序。随着 .NET 5 及以后版本的发布,它进一步增强了跨平台支持,使得开发者可以在多个操作系统上构建高性能的应用。
POWERSHELL控制台
可以右键对控制台的各种属性进行一个修改
POWERSHELL快捷键
1. 编辑命令和文本
- Up Arrow:查看历史命令(向上箭头)。
- Down Arrow:查看下一个历史命令(向下箭头)。
- Tab:自动补全命令或文件路径。如果输入部分命令并按下 Tab 键,PowerShell 会自动补全命令或路径。
- Shift + Tab:反向自动补全。
- Ctrl + A:选择整个命令行。
- Ctrl + C:取消当前命令执行(如果命令正在执行中)。
- Ctrl + X:剪切当前命令行中的文本。
- Ctrl + V:粘贴已剪切或复制的文本。
- Ctrl + Z:撤销上一步的编辑(某些 PowerShell 控制台支持此快捷键)。
- Ctrl + Shift + V:在 Windows Terminal 中粘贴文本。
- Home:将光标移到当前命令行的开头。
- End:将光标移到当前命令行的末尾。
- Ctrl + Home:清除当前命令行。
- Ctrl + End:删除当前命令行。
2. 执行命令
- Enter:执行当前命令行中的命令。
- Shift + Enter:在当前命令行中插入换行符,通常用于在脚本中分隔行。
3. 操作历史命令
- F7:显示历史命令的图形化列表。你可以通过箭头键选择要执行的命令。
- Ctrl + R:反向搜索历史命令。按 Ctrl + R 后,开始输入关键字,PowerShell 会自动匹配历史命令。
- Ctrl + S:正向搜索历史命令(与 Ctrl + R 相反)。
4. 复制和粘贴
- Ctrl + Shift + C:复制选中的文本(仅适用于 Windows Terminal)。
- Ctrl + Shift + V:粘贴剪贴板中的内容(仅适用于 Windows Terminal)。
- Ctrl + Insert:复制选中的文本(在大多数 PowerShell 控制台中有效)。
- Shift + Insert:粘贴剪贴板中的内容(在大多数 PowerShell 控制台中有效)。
5. 输出和打印
- Write-Host:将内容直接输出到控制台。例如:
Write-Host "Hello, World!" - Write-Output:输出数据到管道。与 Write-Host 不同,它会将数据传递给下一个命令。
Write-Output "This is an output message."
通常用于将数据传递给管道中的其他命令。 - Write-Verbose:输出详细信息(如果启用详细模式)。可以使用 -Verbose 参数来启用。
Write-Verbose "This is a verbose message." - Write-Debug:输出调试信息,通常与调试模式一起使用。
Write-Debug "This is a debug message." - Write-Warning:输出警告信息。
Write-Warning "This is a warning message." - Write-Error:输出错误信息。
Write-Error "This is an error message."
6. 控制台滚动和选择
- Ctrl + Up Arrow:向上滚动一个命令行。
- Ctrl + Down Arrow:向下滚动一个命令行。
- Ctrl + Shift + Up Arrow:向上滚动一页。
- Ctrl + Shift + Down Arrow:向下滚动一页。
7. 在 Windows Terminal 中的特殊快捷键
如果你使用的是 Windows Terminal,还可以享受一些额外的快捷键功能:
- Ctrl + Shift + T:打开一个新的标签页。
- Ctrl + Shift + W:关闭当前标签页。
- Ctrl + Shift + 1..9:切换到第 1 到第 9 个标签页。
- Alt + Enter:切换全屏模式。
- Ctrl + Shift + P:打开命令面板,在命令面板中可以选择切换配置文件、查看快捷键等。
POWERSHELL的各种运算
PowerShell 支持多种类型的运算,包括算术运算、比较运算、逻辑运算、字符串运算等。下面详细介绍 PowerShell 支持的各种运算类型:
1. 算术运算
算术运算符用于执行数学运算,比如加法、减法、乘法、除法等。
运算符 | 描述 | 示例 |
+ | 加法 | $a + $b |
- | 减法 | $a - $b |
* | 乘法 | $a * $b |
/ | 除法 | $a / $b |
% | 取余(模) | $a % $b |
** | 幂运算(指数) | $a ** $b |
++ | 自增 | $a++ |
-- | 自减 | $a-- |
示例:
$a = 5
$b = 2
$a + $b # 结果是 7
$a - $b # 结果是 3
$a * $b # 结果是 10
$a / $b # 结果是 2.5
$a % $b # 结果是 1
$a ** $b # 结果是 25 (5^2)
2. 比较运算
比较运算符用于比较两个值,并返回布尔值($true 或 $false)。
运算符 | 描述 | 示例 |
-eq | 等于 | $a -eq $b |
-ne | 不等于 | $a -ne $b |
-lt | 小于 | $a -lt $b |
-le | 小于等于 | $a -le $b |
-gt | 大于 | $a -gt $b |
-ge | 大于等于 | $a -ge $b |
-like | 匹配(通配符) | $a -like "a*" |
-notlike | 不匹配(通配符) | $a -notlike "a*" |
-match | 正则表达式匹配 | $a -match "^hello" |
-notmatch | 正则表达式不匹配 | $a -notmatch "world" |
示例:
$a = 5
$b = 3
$a -eq $b # 结果是 $false
$a -ne $b # 结果是 $true
$a -lt $b # 结果是 $false
$a -gt $b # 结果是 $true
$a -ge $b # 结果是 $true
3. 逻辑运算
逻辑运算符用于在条件语句中进行逻辑运算,常用于组合多个布尔表达式。
运算符 | 描述 | 示例 |
-and | 逻辑与(AND) | $a -eq 5 -and $b -eq 3 |
-or | 逻辑或(OR) | $a -eq 5 -or $b -eq 3 |
-not | 逻辑非(NOT) | -not ($a -eq 5) |
-xor | 逻辑异或(XOR) | $a -eq 5 -xor $b -eq 3 |
示例:
$a = 5
$b = 3
($a -eq 5) -and ($b -eq 3) # 结果是 $true
($a -eq 5) -or ($b -eq 4) # 结果是 $true
-not ($a -eq 5) # 结果是 $false
($a -eq 5) -xor ($b -eq 3) # 结果是 $false
4. 字符串运算
PowerShell 支持多种字符串操作,例如连接、格式化、比较等。
运算符 | 描述 | 示例 |
+ | 字符串连接 | "Hello, " + "World!" |
-eq | 字符串相等比较 | "hello" -eq "hello" |
-ne | 字符串不等比较 | "hello" -ne "world" |
-like | 字符串匹配(通配符) | "hello" -like "h*o" |
-notlike | 字符串不匹配(通配符) | "hello" -notlike "h*o" |
-match | 正则表达式匹配 | "hello" -match "h.*" |
-notmatch | 字符串不匹配(正则表达式) | "hello" -notmatch "world" |
示例:
# 字符串连接
$greeting = "Hello, " + "World!" # 结果是 "Hello, World!"
# 字符串相等比较
"apple" -eq "apple" # 结果是 $true
"apple" -ne "orange" # 结果是 $true
# 字符串匹配
"hello" -like "h*" # 结果是 $true
"hello" -match "^h" # 结果是 $true
5. 赋值运算
赋值运算符用于将值赋给变量,支持常见的简单赋值和复合赋值。
运算符 | 描述 | 示例 |
= | 简单赋值 | $a = 5 |
+= | 增加赋值 | $a += 2 |
-= | 减少赋值 | $a -= 2 |
*= | 乘法赋值 | $a *= 2 |
/= | 除法赋值 | $a /= 2 |
%= | 取余赋值 | $a %= 2 |
示例:
$a = 5
$a += 3 # 结果是 8
$a -= 2 # 结果是 6
$a *= 2 # 结果是 12
$a /= 3 # 结果是 4
6. 类型转换运算
PowerShell 提供了多种类型转换方法,允许在不同数据类型之间转换。
运算符 | 描述 | 示例 |
[type] | 强制类型转换 | [int]$a |
-as | 类型转换(尝试转换,失败返回 $null) | $a -as [int] |
-is | 检查对象是否为指定类型 | $a -is [int] |
示例:
# 强制转换
$number = [int]"123" # 结果是 123
# 尝试转换
$converted = $a -as [int] # 如果 $a 可以转换成整数,则返回整数,否则返回 $null
# 类型检查
$a -is [string] # 结果是 $true
7. 位运算
PowerShell 支持位操作符,用于在二进制级别处理整数值。
运算符 | 描述 | 示例 |
-band | 按位与(AND) | $a -band $b |
-bor | 按位或(OR) | $a -bor $b |
-bxor | 按位异或(XOR) | $a -bxor $b |
-bnot | 按位非(NOT) | $a -bnot |
-shl | 按位左移(Shift Left) | $a -shl $b |
-shr | 按位右移(Shift Right) | $a -shr $b |