-
核心特点:基于.NET CLR,支持对象传递、模块化设计、丰富的cmdlet(如Get-Command),支持管道和脚本编程。 -
文档与帮助:使用Get-Help获取命令帮助,Update-Help更新帮助文档。
-
变量:以$开头,支持类型自动推断(如$var = 123),包含自动变量(如$null、$LASTEXITCODE)。 -
数据类型:布尔值($true/$false)、整数/浮点数、字符串(单引号与双引号的变量插值差异)。 -
对象系统:一切皆对象,通过Get-Member查看对象属性和方法,使用点记法访问属性(如$str.Length)。 -
数据结构: -
数组:用@()创建,支持索引访问和范围操作(如$arr[0..2])。 -
ArrayList:动态数组,通过Add()和Remove()操作。 -
哈希表:用@{key=value}创建,通过键访问值(如$hash['key'])。
-
条件语句:if/else、elseif、switch(适用于多条件匹配)。 -
循环: -
foreach:遍历数组或集合(如foreach ($item in $array))。 -
for:指定次数循环(如for ($i=0; $i<10; $i++))。 -
while/do-while:条件满足时循环。 -
脚本与管道: -
脚本:保存为.ps1文件,通过.script.ps1执行。 -
管道:用|传递对象,如Get-Process | Where-Object {$_CPU -gt 10}。
-
错误类型: -
终止性错误:中断脚本执行,需用try/catch捕获。 -
非终止性错误:不中断执行,可通过$ErrorActionPreference控制(如-ErrorAction Stop转为终止性)。 -
函数: -
定义:function My-Function { param($param1) ... }。 -
参数:支持强制参数、默认值、验证属性(如[ValidateSet('option1','option2')])。 -
管道支持:通过ValueFromPipeline参数接收输入。
-
模块: -
封装函数的集合,保存为.psm1,通过Import-Module加载。 -
常用模块:ActiveDirectory(AD管理)、Az(Azure)、AWSPowerShell(AWS)。 -
远程处理: -
使用Invoke-Command执行远程命令,New-PSSession创建持久会话。 -
支持跨计算机执行脚本,需配置WinRM服务。
-
用于验证代码逻辑,通过describe、it组织测试用例,使用should断言(如$result | should -BeTrue)。 -
典型结构:describe "测试场景" { it "测试用例" { ... } }。
-
CSV: -
读取:Import-Csv -Path file.csv。 -
写入:Export-Csv -Path new.csv -NoTypeInformation。 -
Excel:使用ImportExcel模块,支持创建工作表、数据透视表。 -
JSON: -
解析:ConvertFrom-Json将JSON转为对象。 -
生成:ConvertTo-Json将对象转为JSON。
-
对象操作: -
用户:New-ADUser创建,Set-ADUser修改属性,Get-ADUser查询。 -
计算机:New-ADComputer创建,Get-ADComputer查询。 -
组:New-ADGroup创建,Add-ADGroupMember添加成员。 -
数据同步:通过哈希表映射AD属性与外部数据源(如CSV),实现批量更新。
-
Azure: -
身份验证:创建服务主体,使用Connect-AzAccount登录。 -
资源创建:虚拟机(New-AzVM)、Web应用(New-AzWebApp)、SQL数据库(New-AzSqlDatabase)。 -
AWS: -
身份验证:配置IAM用户,使用Set-AWSCredential保存密钥。 -
资源创建:EC2实例(New-EC2Instance)、Elastic Beanstalk应用(New-EBApplication)、RDS数据库(New-RDSDBInstance)。
-
通过AD获取服务器列表,结合WMI查询硬件信息(如磁盘空间、内存、操作系统),使用Get-CimInstance获取远程计算机数据,生成结构化报告。
-
构建自定义模块,封装常用功能(如服务器管理、云资源部署),结合Pester测试确保代码可靠性。
-
常用命令:Get-Command、Get-Member、Invoke-Command、Import-Module。 -
最佳实践: -
模块化编程,避免脚本冗长。 -
错误处理优先,使用try/catch和-ErrorAction。 -
利用管道和对象传递提升效率。 -
文档与注释,提高代码可读性。
原文始发于微信公众号(运维星火燎原):PowerShell 实战指南
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论