PowerShell 语法

PowerShell是微软公司开发的一种任务自动化和配置管理框架,基于.NET框架。

以下是PowerShell的一些常用语法:

  1. 命令语法:

    • 标准命令语法:-(如 Get-ChildItem)
    • 活动目录命令语法:-(如 Get-ADUser)
  2. 参数:格式为-

  3. 管道(管道符 |):将输入传递给输出。

    • 可以将多个命令组合在一起,例如 Get-ChildItem | Sort-Object
    • 可以使用Select-Object过滤输出,例如Get-Service | Select-Object -First 10
  4. 变量:使用 $ 符号定义变量,例如 $a = 10。

  5. 条件语句:使用if、else和elseif关键字执行条件语句。

  6. 循环语句:常见的循环语句有for、foreach、while。

  7. 函数:使用function关键字定义函数。

  8. 注释:注释以井号(#)开头。

Get-ChildItem -Path C:\Temp\

    Directory: C:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        7/17/2020   1:30 PM              0 file1.txt
-a----        7/17/2020   1:31 PM              0 file2.txt
  1. 数组:使用 $ 数组符号和 @ 符号来定义数组和引用数组元素 :
    例如,定义一个包含整数和字符串的数组:
$array = 1, "two", 3, "four"
$array[0]  # 输出 1
$array[1]  # 输出 "two"

  1. 对象:PowerShell基于.NET,因此您可以使用各种.NET类来创建对象。
# 创建一个 DateTime 对象
$date = [System.DateTime]::Now

# 创建一个 ArrayList 对象
$arrayList = New-Object System.Collections.ArrayList

  1. 类型转换:使用 as 或者 cast 来进行类型转换。
  2. 异常处理:使用 try 和 catch 关键字来捕获和处理异常。
  3. 别名:PowerShell提供了更简单的命令别名以节省时间。例如,可以使用 gal 代替 Get-Alias 命令:
gal
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
...

  1. 路径解析器:PowerShell中的路径解析器将所有路径转换为标准的分层结构。这样,无论使用哪种操作系统或环境变量设置,路径篡改将极大地减少。
#可以使用以下命令来获取文件路径:
$FilePath = (Resolve-Path .\file.txt).Path

  • 命令检索:PowerShell提供了多种检索命令的方法,例如:

    • Get-Command:列出给定名称模式的所有命令。
    • Get-Help:为命令,组件或概念提供完整的帮助文档。
    • Get-Member:自动显示由输入对象拥有的成员。
# 列出所有关于 Process 的命令
Get-Command *Process*

# 获取关于 Get-ChildItem 命令的帮助文档
Get-Help Get-ChildItem

# 获取 Powershell 进程对象的所有属性和方法
(Get-Process | Get-Member | Select-Object Name)

  1. 脚本块:使用花括号 {} 定义一个代码块。代码块可以用于编写多个命令或创建函数。
    例如,下面是一个获取当前日期并将其打印在屏幕上的代码块:
{ 
    $Date = Get-Date
    Write-Host "Today is $Date"
}

  1. 键值对集合:PowerShell提供了 Hashtable 数据结构来管理键和值。可以使用大括号 {} 和分号 ; 来定义一个 Hashtable。
例如,下面是一个包含两个键值对的 Hashtable:
$MyHash = @{
    "Name" = "John Smith"
    "Age" = 30
}
可以访问 Hashtable 的值:
$MyHash["Name"]  # 输出 "John Smith"
$MyHash["Age"]   # 输出 30


  1. 操作符:PowerShell支持以下类型的操作符:

    • 算术操作符:+、-、*、/、%
    • 逻辑运算符:-and、-or、-not
    • 比较操作符:-eq、-ne、-gt、-ge、-lt、-le
    • 正则表达式匹配:-match、-replace、-like
    • 框架操作符:-as、-is、-and、-or
# 算术运算
$a = 10
$b = 5
$c = $a + $b   # 输出 15

# 逻辑运算
$True -and $False   # 输出 False

# 比较运算
$a -eq $b   # 输出 False

# 正则表达式匹配
"Hello World" -match "He.*ld"   # 输出 True

  1. 日志记录:PowerShell提供了用于记录日志的命令。例如,Write-Output 和 Write-Host 可以将输出写入日志文件或控制台。
# 将输出记录到日志文件中
Write-Output "This is a log message." | Out-File "C:\Temp\log.txt"

# 在控制台输出带不同颜色的信息
Write-Host "Error message" -ForegroundColor Red
Write-Host "Warning message" -ForegroundColor Yellow
Write-Host "Information message" -ForegroundColor Green

  1. 远程执行:PowerShell提供了在远程计算机上执行命令的功能。可以使用 Invoke-Command 命令来执行远程命令。
    例如,使用以下命令在远程计算机上获取服务列表:
Invoke-Command -ComputerName RemoteComputer -ScriptBlock { Get-Service }

  1. 调试:PowerShell提供了各种调试命令以便于查找和解决错误。
    例如,以下命令可以启用调试模式:
Set-PSDebug -Trace 1
#可以使用以下命令在运行脚本时中断:
Set-Policy -Strict
也可以使用 Write-Debug 在脚本中添加调试消息:
Write-Debug "This is a debug message."

  1. 数据导入和导出:PowerShell支持各种数据格式的导入和导出,例如 CSV、JSON、XML 和 Excel。
    例如,可以使用以下命令将输出保存为 CSV 文件:
Get-Process | Select-Object Name, CPU | Export-Csv -Path "C:\Temp\process.csv" -NoTypeInformation

# 也可以使用以下命令从 CSV 文件中导入数据:
$MyData = Import-Csv -Path "C:\Temp\mydata.csv"

  1. 配置管理:PowerShell可用于管理Windows和其它系统的配置。
    例如,可以使用以下命令来安装或卸载软件:
# 安装软件
Install-Package -Name Firefox

# 卸载软件
Uninstall-Package -Name Firefox
  1. 任务调度:PowerShell可用于安排任务和计划在将来执行的命令。
    例如,使用以下命令将脚本计划在每天的特定时间运行:
New-ScheduledTaskTrigger -Daily -At "6:00AM" | Register-ScheduledTask -TaskName "MyTask" -Action { C:\Scripts\MyScript.ps1 }

  1. 交互式命令行界面:PowerShell提供了一个交互式命令行界面,可用于快速执行命令并运行脚本。
    例如,可以使用以下命令打开PowerShell交互式命令行界面:
powershell.exe -NoExit

  1. 提供帮助文档:在编写 PowerShell 命令和脚本时,可以通过提供帮助文档来帮助用户了解命令和脚本的功能和用法。
    例如,以下是简单的帮助文档示例:
<#
.SYNOPSIS
This command returns the current date and time.

.DESCRIPTION
The Get-DateTime command returns the current date and time, including the time zone.

.EXAMPLE
Get-DateTime
Returns the current date and time.

.NOTES
Author: John Doe
Date: 10/1/2021
#>
function Get-DateTime {
    $Date = Get-Date
    Write-Output "The date and time is $Date"
}

  1. 使用自动完成:PowerShell提供了自动完成功能,可以使用 Tab 键进行命令和参数的自动完成。
Ge<Tab>

  1. 网络管理:PowerShell可用于管理计算机和网络的各个方面,如网络适配器、防火墙规则和远程桌面。
    例如,可以使用以下命令启用远程桌面连接:
Enable-RemoteDesktop
#也可以使用以下命令打开防火墙端口:
New-NetFirewallRule -DisplayName "My Rule" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80

  1. 使用多线程:PowerShell 可以使用多线程来同时执行多个操作。例如,可以使用以下命令使用多线程操作:
# 创建线程池和任务
$Pool = [Threading.ThreadPool]::new()
$Task1 = [Threading.ThreadPool]::QueueUserWorkItem({ Get-ChildItem C:\Folder1 }, $null)
$Task2 = [Threading.ThreadPool]::QueueUserWorkItem({ Get-ChildItem C:\Folder2 }, $null)

# 等待任务完成
while ($Task1.IsCompleted -eq $false -or $Task2.IsCompleted -eq $false) {
    Start-Sleep -Milliseconds 500
}

  1. 使用运算符优先级:当使用多个运算符时,可以使用运算符优先级来明确运算顺序。
    例如,顺序计算以下表达式时,先进行乘法,再进行加法:
$a = 1 + 2 * 3
# $a 的值为 7
#可以使用圆括号来明确优先级:
$b = (1 + 2) * 3
# $b 的值为 9


  1. 密码加密:PowerShell 可以使用 ConvertTo-SecureString 和 ConvertFrom-SecureString 命令将密码加密并存储在文件或配置文件中。
# 例如,可以使用以下命令将密码 MyPassword 加密成一个安全字符串:
$SecurePassword = ConvertTo-SecureString 'MyPassword' -AsPlainText -Force
#也可以使用以下命令将安全字符串转换为普通字符串:
$Password = ConvertFrom-SecureString $SecurePassword

  1. 使用别名:PowerShell 提供了许多命令和参数的别名,可以节省时间和键入量。
    例如,以下是许多常用命令和参数的别名:
ls 代替 Get-ChildItem
dir 代替 Get-ChildItem
cd 代替 Set-Location
cp 代替 Copy-Item
mv 代替 Move-Item
rm 代替 Remove-Item
Confirm 代替 ConfirmImpact
Verbose 代替 VerboseOutput
#可以使用以下命令列出任意命令或参数的所有别名:
Get-Alias -Name CommandOrParameter

  1. 使用选择器:PowerShell提供了各种选择器,可以选择特定的对象和属性。
    例如,以下命令将返回所有具有 LastName 属性的 Get-ADUser 对象:
Get-ADUser | Select-Object LastName
#也可以选择多个属性:
Get-ADUser | Select-Object GivenName, SurName

  1. 使用管道导出格式:可以使用管道符号 | 和 Export-Csv 命令将结果导出为 CSV 文件。
#例如,以下命令将 Get-Service 命令的输出导出为 services.csv 文件:

Get-Service | Export-Csv -Path .\services.csv -NoTypeInformation
#也可以使用 Export-Clixml 命令将结果导出为 XML 文件。
  1. 使用参数集:PowerShell 中的参数集允许更好地组织和文档化参数。使用参数集可以指定参数的特定集合和行为。例如,以下示例定义了 Get-ProcessInfo 命令,该命令有两个参数集,分别用于列出进程和列出进程及其详细信息:
function Get-ProcessInfo {
    [CmdletBinding(DefaultParameterSetName = 'ProcessList')]
    param(
        [Parameter(ParameterSetName = 'ProcessList')]
        [Switch]$List,
        
        [Parameter(ParameterSetName = 'ProcessDetail')]
        [Switch]$Detailed
    )
    
    if ($List.IsPresent) {
        Get-Process | Select-Object Name, Id
    }

    if ($Detailed.IsPresent) {
        Get-Process | Sort-Object Name | Format-Table
    }
}

  1. 使用管道输出:可以使用管道符号 | 和 Out-Default 命令将输出发送到系统默认打印机。
    例如,以下命令将 Get-Process 命令的输出发送到默认打印机:
Get-Process | Out-Default

  1. PowerShell的Assert命令用于测试和调试目的。它验证给定条件是否为真,如果不是,则会引发错误。

Assert命令的语法如下:

Assert [-Condition] <Object> [-Message <String>] [<CommonParameters>]

下面是每个参数的含义:

Condition:必填。这是您想要测试的条件或表达式。
Message:选填。这是断言失败时显示的消息。如果您没有提供消息,则会显示默认消息。
例如,假设您想要测试变量名为$x是否等于5。以下是如何使用Assert命令来执行此操作:

$x = 5
Assert ($x -eq 5) -Message "变量 x 不等于 5"

如果 x 确实等于 5 ,则不会发生任何事情。但是,如果 x确实等于5,则不会发生任何事情。但是,如果 x确实等于5,则不会发生任何事情。但是,如果x不等于5,则PowerShell将引发错误并显示您指定的消息:

Assert-Error: 变量x不等于5
At line:1 char:1
+ Assert ($x -eq 5) -Message "变量 x 不等于 5"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (变量 x 不等于 5:String) [], RuntimeException
    + FullyQualifiedErrorId : 变量 x 不等于 5

你可能感兴趣的:(技术名词与概念,windows,microsoft)