PowerShell是微软公司开发的一种任务自动化和配置管理框架,基于.NET框架。
以下是PowerShell的一些常用语法:
命令语法:
参数:格式为-
管道(管道符 |):将输入传递给输出。
变量:使用 $ 符号定义变量,例如 $a = 10。
条件语句:使用if、else和elseif关键字执行条件语句。
循环语句:常见的循环语句有for、foreach、while。
函数:使用function关键字定义函数。
注释:注释以井号(#)开头。
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
$array = 1, "two", 3, "four"
$array[0] # 输出 1
$array[1] # 输出 "two"
# 创建一个 DateTime 对象
$date = [System.DateTime]::Now
# 创建一个 ArrayList 对象
$arrayList = New-Object System.Collections.ArrayList
gal
CommandType Name Version Source
----------- ---- ------- ------
Alias % -> ForEach-Object
...
#可以使用以下命令来获取文件路径:
$FilePath = (Resolve-Path .\file.txt).Path
命令检索:PowerShell提供了多种检索命令的方法,例如:
# 列出所有关于 Process 的命令
Get-Command *Process*
# 获取关于 Get-ChildItem 命令的帮助文档
Get-Help Get-ChildItem
# 获取 Powershell 进程对象的所有属性和方法
(Get-Process | Get-Member | Select-Object Name)
{
$Date = Get-Date
Write-Host "Today is $Date"
}
例如,下面是一个包含两个键值对的 Hashtable:
$MyHash = @{
"Name" = "John Smith"
"Age" = 30
}
可以访问 Hashtable 的值:
$MyHash["Name"] # 输出 "John Smith"
$MyHash["Age"] # 输出 30
操作符:PowerShell支持以下类型的操作符:
# 算术运算
$a = 10
$b = 5
$c = $a + $b # 输出 15
# 逻辑运算
$True -and $False # 输出 False
# 比较运算
$a -eq $b # 输出 False
# 正则表达式匹配
"Hello World" -match "He.*ld" # 输出 True
# 将输出记录到日志文件中
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
Invoke-Command -ComputerName RemoteComputer -ScriptBlock { Get-Service }
Set-PSDebug -Trace 1
#可以使用以下命令在运行脚本时中断:
Set-Policy -Strict
也可以使用 Write-Debug 在脚本中添加调试消息:
Write-Debug "This is a debug message."
Get-Process | Select-Object Name, CPU | Export-Csv -Path "C:\Temp\process.csv" -NoTypeInformation
# 也可以使用以下命令从 CSV 文件中导入数据:
$MyData = Import-Csv -Path "C:\Temp\mydata.csv"
# 安装软件
Install-Package -Name Firefox
# 卸载软件
Uninstall-Package -Name Firefox
New-ScheduledTaskTrigger -Daily -At "6:00AM" | Register-ScheduledTask -TaskName "MyTask" -Action { C:\Scripts\MyScript.ps1 }
powershell.exe -NoExit
<#
.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"
}
Ge<Tab>
Enable-RemoteDesktop
#也可以使用以下命令打开防火墙端口:
New-NetFirewallRule -DisplayName "My Rule" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80
# 创建线程池和任务
$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
}
$a = 1 + 2 * 3
# $a 的值为 7
#可以使用圆括号来明确优先级:
$b = (1 + 2) * 3
# $b 的值为 9
# 例如,可以使用以下命令将密码 MyPassword 加密成一个安全字符串:
$SecurePassword = ConvertTo-SecureString 'MyPassword' -AsPlainText -Force
#也可以使用以下命令将安全字符串转换为普通字符串:
$Password = ConvertFrom-SecureString $SecurePassword
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
Get-ADUser | Select-Object LastName
#也可以选择多个属性:
Get-ADUser | Select-Object GivenName, SurName
#例如,以下命令将 Get-Service 命令的输出导出为 services.csv 文件:
Get-Service | Export-Csv -Path .\services.csv -NoTypeInformation
#也可以使用 Export-Clixml 命令将结果导出为 XML 文件。
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
}
}
Get-Process | Out-Default
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