PowerShell 技能连载 - 服务依赖分析与启动顺序

适用于 PowerShell 5.1 及以上版本

Windows 系统中的服务并非孤立运行,许多服务之间存在依赖关系。例如,Web 服务可能依赖 IIS,IIS 又依赖 HTTP.sys 驱动服务;数据库服务可能依赖远程过程调用(RPC)和事件日志服务。当需要批量重启服务、排查启动失败或规划系统迁移时,理清服务之间的依赖链条至关重要。

手动查阅服务的”依赖”选项卡效率低下,尤其是面对多层嵌套的依赖关系时。PowerShell 可以通过 WMI 和 Get-Service 等原生命令递归遍历服务依赖树,自动生成启动顺序报告,甚至可以一键按正确顺序停止和启动一组相互依赖的服务。

本文将介绍如何使用 PowerShell 分析 Windows 服务依赖关系,并生成可视化报告和自动化启停脚本。

阅读更多

PowerShell 技能连载 - 进度反馈与用户体验

适用于 PowerShell 5.1 及以上版本

长时间运行的脚本如果不给用户任何反馈,就像一个”黑盒”——用户不知道脚本在做什么、进度如何、是否卡死了。良好的进度反馈是区分”能用”和”好用”脚本的关键。PowerShell 提供了 Write-Progress 命令用于显示进度条、Write-Verbose 用于详细输出、Write-Debug 用于调试信息,合理使用这些机制可以大幅提升脚本的用户体验。

本文将讲解 PowerShell 的反馈机制、进度条设计,以及如何构建用户友好的自动化脚本。

阅读更多

PowerShell 技能连载 - 模块开发与打包

适用于 PowerShell 5.1 及以上版本

当你发现自己在多个脚本中复制粘贴相同的函数时,就该考虑创建模块了。模块是 PowerShell 代码复用、分发和版本管理的基本单元。一个设计良好的模块不仅方便自己使用,还可以发布到 PowerShell Gallery 供社区使用。本文将讲解从零创建一个完整模块的过程,包括模块清单、函数设计、帮助文档和发布流程。

阅读更多

PowerShell 技能连载 - 错误处理与日志最佳实践

适用于 PowerShell 7.0 及以上版本

在编写生产级 PowerShell 脚本时,错误处理和日志记录往往是最容易被忽视、却又最为关键的环节。一段没有错误处理的脚本,在遇到网络超时、文件缺失或权限不足时,要么静默失败导致后续逻辑产生难以排查的连锁错误,要么直接崩溃让整个自动化流程中断。而缺乏日志的脚本则如同”黑盒”——出了问题只能靠猜测,无法追溯根因。

PowerShell 提供了丰富的错误处理机制,从基础的 $ErrorActionPreference 到完善的 try/catch/finally 结构,再到自定义错误记录和结构化日志输出。本文将系统性地介绍这些机制,并给出带重试逻辑的健壮脚本模板,帮助你在生产环境中写出更可靠的自动化代码。

阅读更多

PowerShell实现数据中心能耗优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function Get-EnergyConsumption {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$ServerName
)

$cpuUsage = (Get-Counter -ComputerName $ServerName '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue
$memoryUsage = (Get-Counter -ComputerName $ServerName '\Memory\Available MBytes').CounterSamples.CookedValue

# 计算能耗估算(基于Intel Xeon处理器能效模型)
$energyCost = [math]::Round(($cpuUsage * 0.7) + ($memoryUsage * 0.05), 2)

[PSCustomObject]@{
ServerName = $ServerName
Timestamp = (Get-Date).ToString('yyyy-MM-dd HH:mm:ss')
CPUUsage = "$cpuUsage%"
MemoryAvailable = "${memoryUsage}MB"
EstimatedPower = "${energyCost}W"
OptimizationSuggestion = if ($cpuUsage -lt 30) {'建议启用节能模式'} else {'建议优化负载分配'}
}
}

# 监控服务器集群
'SRV01','SRV02','SRV03' | ForEach-Object {
Get-EnergyConsumption -ServerName $_ -Verbose
} | Export-Csv -Path "Energy_Report_$(Get-Date -Format yyyyMMdd).csv"

核心功能:

  1. 实时监控服务器CPU/内存使用率
  2. 基于能效模型估算功耗
  3. 生成节能优化建议

扩展方向:

  • 集成IPMI接口获取实际功耗
  • 添加自动电源模式调整功能
  • 与Kubernetes集成实现智能调度

PowerShell 技能连载 - 区块链智能合约自动化管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function Invoke-SmartContractOperation {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$ContractABI,

[ValidateSet('Deploy','Execute','Query')]
[string]$OperationType = 'Query'
)

$blockchainReport = [PSCustomObject]@{
Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
TransactionHash = $null
GasUsed = 0
ContractAddress = $null
}

try {
# 初始化Web3实例
$web3 = New-Web3 -ProviderUrl 'https://mainnet.infura.io/v3/YOUR-API-KEY'

# 智能合约操作
switch($OperationType) {
'Deploy' {
$txReceipt = $web3.Eth.DeployContract.SendRequestAsync($ContractABI).GetAwaiter().GetResult()
$blockchainReport.ContractAddress = $txReceipt.ContractAddress
}
'Execute' {
$contract = $web3.Eth.GetContract($ContractABI, $blockchainReport.ContractAddress)
$function = $contract.GetFunction('executeOperation')
$txHash = $function.SendTransactionAsync().GetAwaiter().GetResult()
$blockchainReport.TransactionHash = $txHash
}
'Query' {
$contract = $web3.Eth.GetContract($ContractABI, $blockchainReport.ContractAddress)
$result = $contract.GetFunction('getState').CallAsync().GetAwaiter().GetResult()
return $result
}
}

# 获取Gas消耗
$txReceipt = $web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync($blockchainReport.TransactionHash).GetAwaiter().GetResult()
$blockchainReport.GasUsed = $txReceipt.GasUsed
}
catch {
Write-Error "智能合约操作失败: $_"
}

# 生成区块链审计日志
$blockchainReport | ConvertTo-Json |
Out-File -Path "$env:TEMP/BlockchainReport_$(Get-Date -Format yyyyMMdd).json"
return $blockchainReport
}

核心功能

  1. 智能合约自动化部署
  2. 交易执行与状态查询
  3. Gas消耗实时监控
  4. JSON格式审计日志

应用场景

  • DeFi协议自动化管理
  • NFT数字资产发行
  • DAO治理流程自动化
  • 跨链桥接操作监控

PowerShell 技能连载 - 工业能源优化智能分析系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function Optimize-IndustrialEnergy {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$DeviceEndpoint,

[ValidateSet('Realtime','Historical')]
[string]$AnalysisMode = 'Realtime'
)

$energyReport = [PSCustomObject]@{
Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
PowerConsumption = @{}
Predictions = @{}
Anomalies = @()
}

try {
# 实时能耗数据采集
$liveData = Invoke-RestMethod -Uri "$DeviceEndpoint/api/live"
$energyReport.PowerConsumption = $liveData.Measurements |
Group-Object DeviceID -AsHashTable

# 历史数据分析模式
if ($AnalysisMode -eq 'Historical') {
$historicalData = Invoke-RestMethod -Uri "$DeviceEndpoint/api/history?days=30"
$energyReport.Predictions = $historicalData |
ForEach-Object {
[PSCustomObject]@{
DeviceID = $_.DeviceID
PredictedUsage = [math]::Round($_.Baseline * (1 + (Get-Random -Minimum -0.1 -Maximum 0.1)),2)
}
}
}

# 异常检测引擎
$liveData.Measurements | ForEach-Object {
if ($_.CurrentUsage -gt ($_.Baseline * 1.15)) {
$energyReport.Anomalies += [PSCustomObject]@{
Device = $_.DeviceID
Metric = 'PowerOverload'
Actual = $_.CurrentUsage
Threshold = [math]::Round($_.Baseline * 1.15,2)
}
}
}
}
catch {
Write-Error "能源数据分析失败: $_"
}

# 生成优化建议报告
$energyReport | Export-Clixml -Path "$env:TEMP/EnergyReport_$(Get-Date -Format yyyyMMdd).xml"
return $energyReport
}

核心功能

  1. 工业能耗实时/历史数据分析
  2. 智能基线预测模型
  3. 异常超限检测引擎
  4. XML格式优化报告生成

应用场景

  • 工业控制系统能耗优化
  • 智能电网负载预测
  • 生产设备预防性维护
  • 碳足迹分析与管理

PowerShell 技能连载 - 边缘计算环境中的IoT设备监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function Get-IoTEdgeDeviceStatus {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$DeviceIPRange,

[ValidateRange(1,65535)]
[int]$PollingInterval = 300
)

$deviceReport = [PSCustomObject]@{
Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
OnlineDevices = @()
OfflineDevices = @()
AbnormalMetrics = @()
}

# 执行Ping扫描发现设备
$discoveredDevices = Test-Connection -ComputerName $DeviceIPRange -Count 1 -AsJob |
Wait-Job | Receive-Job |
Where-Object { $_.StatusCode -eq 0 } |
Select-Object Address,ResponseTime

# 获取设备遥测数据
$discoveredDevices | ForEach-Object {
try {
$metrics = Invoke-RestMethod -Uri "http://$($_.Address)/metrics" -TimeoutSec 5

$deviceReport.OnlineDevices += [PSCustomObject]@{
IPAddress = $_.Address
Latency = $_.ResponseTime
CPUUsage = $metrics.cpu_usage
MemoryUsage = $metrics.memory_usage
}

if($metrics.cpu_usage -gt 90 -or $metrics.memory_usage -gt 85) {
$deviceReport.AbnormalMetrics += [PSCustomObject]@{
IPAddress = $_.Address
Metric = ($metrics | ConvertTo-Json)
Threshold = "CPU >90% 或 Memory >85%"
}
}
}
catch {
$deviceReport.OfflineDevices += $_.Address
}
}

# 生成HTML报告
$reportPath = "$env:TEMP/IoTEdgeReport_$(Get-Date -Format yyyyMMdd).html"
$deviceReport | ConvertTo-Html -Title "IoT设备健康报告" | Out-File $reportPath
return $deviceReport
}

核心功能

  1. 工业设备自动发现与状态采集
  2. 设备资源使用率实时监控
  3. 异常阈值自动预警
  4. HTML格式可视化报告

应用场景

  • 智能制造设备监控
  • 能源行业传感器网络
  • 智慧城市基础设施
  • 远程设备维护预警

PowerShell 技能连载 - 安全策略配置指南

PowerShell执行策略是脚本安全的第一道防线,通过灵活配置平衡功能与安全。

1
2
3
4
5
# 查看当前执行策略
Get-ExecutionPolicy -List

# 设置远程签名策略
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

脚本签名验证

  1. 创建代码签名证书:
1
2
3
4
5
6
7
$certParams = @{
Subject = 'CN=PowerShell Scripts'
Type = 'CodeSigning'
KeyUsage = 'DigitalSignature'
KeyLength = 2048
}
$cert = New-SelfSignedCertificate @certParams
  1. 签名脚本文件:
1
2
3
4
5
6
$signParams = @{
Certificate = $cert
FilePath = 'script.ps1'
TimestampServer = 'http://timestamp.digicert.com'
}
Set-AuthenticodeSignature @signParams

安全日志分析

1
2
3
4
5
6
7
# 查询脚本块日志
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-PowerShell/Operational'
Id = 4104
} | Where-Object {
$_.Message -match '可疑命令'
}

最佳实践:

  • 使用AllSigned策略生产环境
  • 定期轮换签名证书
  • 启用脚本块日志记录
  • 结合AppLocker增强控制
PowerShell 技术 QQ 群