Powershell学习笔记

声明! 学习视频来自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 可以用于配置管理工具,如 PuppetChefAnsible 等,可以在多个系统中一致地配置环境。
  • 安全性与合规性:通过 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java源力物语》-2.异常训练场

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” \quad 在java.lang古域的一处偏僻角落,矗立着一座古老的训练场。青灰色的围墙上布满了密密麻麻的源力符文,这些符文闪烁着…

一起学Git【第二节:创建版本库】

创建库 这个库相当于一个目录,目录中的文件都被Git管理,会记录每个文件的修改删除和添加工作,便于之后随时跟踪历史记录还原到之前的某一版本。如何创建库呢?有两种方式,本地创建库和云端克隆一个库。 1.本地创建库 …

HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别

在智能手机、平板和其他智能设备日益智能化的今天,视觉识别技术成为提升用户体验和智能交互的重要手段。HarmonyOS NEXT通过基础视觉服务(HMS Core Vision)提供了一套强大的视觉识别功能,其中多目标识别作为其关键技术之一&#x…

nginx-静态资源部署

目录 静态资源概述 静态资源配置指令 listen指令 server_name指令 精确匹配 ​编辑 ​编辑 使用通配符匹配 使用正则表达式匹配 匹配执行顺序 default_server属性 location指令 root指令 alias指令 root与alisa指令的区别 index指令 error_page指令 直接使用 …

时空信息平台架构搭建:基于netty封装TCP通讯模块(IdleStateHandler网络连接监测,处理假死)

文章目录 引言I 异步TCP连接操作II 心跳机制:空闲检测(读空闲和写空闲)基于Netty的IdleStateHandler类实现心跳机制(网络连接监测)常规的处理假死健壮性的处理假死方案获取心跳指令引言 基于netty实现TCP客户端:封装断线重连、连接保持 https://blog.csdn.net/z92911896…

Linux之RPM和YUM命令

一、RPM命令 1、介绍 RPM(RedHat Package Manager).,RedHat软件包管理工具,类似windows里面的setup,exe是Liux这系列操作系统里而的打包安装工具。 RPMI包的名称格式: Apache-1.3.23-11.i386.rpm “apache’” 软件名称“1.3.23-11” 软件的版本号&am…

aosp15 - Activity生命周期切换

本文探查的是,从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点,为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…

【漫话机器学习系列】017.大O算法(Big-O Notation)

大 O 表示法(Big-O Notation) 大 O 表示法是一种用于描述算法复杂性的数学符号,主要用于衡量算法的效率,特别是随着输入规模增大时算法的运行时间或占用空间的增长趋势。 基本概念 时间复杂度 描述算法所需的运行时间如何随输入数…

ensp 基于端口安全的财务部网络组建

ARP IP数据包通过以太网发送,但以太网设备并不能识别IP地址,它们是以MAC地址传输的。因此,必须把IP目的地址转换成MAC目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。 ARP&…

在 Ubuntu 上安装 Muduo 网络库的详细指南

在 Ubuntu 上安装 Muduo 网络库的详细指南 首先一份好的安装教程是非常重要的 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 像这篇文章就和shit一样,安装到2%一定会卡住,如果你不幸用了这个那真是遭老罪了 环境&#xf…

Idean 处理一个项目引用另外一个项目jar 但jar版本低的问题

当在idea中一个module A引用另外一个项目B的jar,但是从私服仓库中拉下的jar版本比较低导致编译不通过时,可以把项目B拉下来,重新编译打包jar跟新到本地的仓库 选中右边菜单的Maven 选中对应的项目B-》Lifecycle->双击 install也可以按住c…

Windows下安装Rabbit MQ

一、安装环境: 系统:windows11; 环境配置安装:otp_win64_25.3.2.14.exe(erlang类库); 服务应用安装:rabbitmq-server-3.12.4.exe; 二、erlang环境: 1.执行…

生态学研究中,森林生态系统的结构、功能与稳定性是核心研究

在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

基于UNITY3D的照片墙演示项目技术分享

unity实现超大图片墙演示,由于拥有海量图片,使用了CPU 多线程,unity dots技术,图片组成文字部分,使用了点阵图技术,提取文字像素。 (关于点阵介绍) 点阵字体是把每一个字符都分成1616或2424个点…

设计模式-访问者设计模式

介绍 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题:在一个机构里面有两种员工,1.Teacher 2.Engineer 员…

ISO/IEC 25010:2023 系统和软件的质量模型(产品质量模型)

本文是对ISO/IEC 25010 2023年底第2版:系统和软件工程-系统和软件质量要求与评估 (SQuaRE)-产品质量模型一文的转载,此外还参考了ISO/IEC 25019:2023(en) Systems and software engineering — Systems and software Quality Requirements and Evaluatio…

【零基础保姆级教程】制作自己的数据集——Labelimg的安装与使用及常见的报错解决方法

1.是什么 LabelImg 是一个图形化的图像标注工具,主要用于机器学习和计算机视觉领域中的数据预处理。它是由 GitHub 用户 tzutalin 开发的开源项目,基于 Python 和 Qt 框架编写。LabelImg 允许用户手动为图像添加边界框(bounding boxes&#…

【java基础系列】实现数字的首位交换算法

在java中&#xff0c;手写实现一个数字的首位交换算法实现 实现效果 实现代码 核心业务代码 public static void main(String[] args) {int[] arr {1,2,3,4,5};int temp arr[0];for (int i 0; i < arr.length; i) {System.out.print(arr[i]);}System.out.println(&quo…

【java面向对象编程】第七弹----Object类、类变量与类方法

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、Object类 1.1equa…

GO--堆(have TODO)

堆 堆&#xff08;Heap&#xff09;是一种特殊的数据结构。它是一棵完全二叉树&#xff08;完全二叉树是指除了最后一层外&#xff0c;每一层上的节点数都是满的&#xff0c;并且最后一层的节点都集中在左边&#xff09;&#xff0c;结放在数组&#xff08;切片&#xff09;中…