...

*Cube-Host – 完整的雲端服務!

PowerShell 自动化:IT 专业人员的通用工具

PowerShell for automation: a universal tool for IT professionals

PowerShell 是一款强大的自动化和管理工具,专为系统管理员设计。它允许您执行脚本、管理服务和用户、监控事件以及与外部系统和 API 进行交互。在本指南中,您将逐步学习如何使用 PowerShell 完成实际任务。

安装与配置

  1. 从官方网站下载 PowerShell 7+:https://github.com/PowerShell/PowerShell
  2. 打开 PowerShell 或 PowerShell ISE(内置脚本编辑器)。

通过执行以下命令允许脚本运行:

  Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  

第一个脚本「Hello.ps1」

创建一个名为「Hello.ps1」的文件,并粘贴以下内容:

  Write-Host "Hello, PowerShell automation!"
Get-Date
$env:USERNAME  

执行以下命令运行脚本:

  .\Hello.ps1  

语法基础

PowerShell 基于清晰简洁的结构:

  • 命令:Get-Process、Start-Service、Stop-Computer
  • 变量:$user = “Admin”
  • 条件:if ($x -gt 10) { … }
  • 循环:foreach ($item in $list) { … }

使用 PowerShell ISE 编辑器或安装了 PowerShell 扩展的 Visual Studio Code 进行高亮显示和自动完成。

脚本的风格和结构

我们建议遵循以下原则:

  • 以动词-名词的形式命名函数:Get-Report、Start-Backup
  • 使用Try-Catch处理错误
  • 添加参数的注释和描述(Docblocks)
  • 将逻辑按函数和模块进行分离

示例:内存监控

  param([int]$Threshold = 80)

$mem = Get-CimInstance Win32_OperatingSystem |
    Select @{Name='FreeGB'; Expression={[math]::Round($_.FreePhysicalMemory/1MB,2)}}

if ($mem.FreeGB -lt $Threshold) {
    Write-Warning "Memory low: $($mem.FreeGB) GB"
} else {
    Write-Host "Memory OK: $($mem.FreeGB) GB"
}
  

脚本会检查是否有足够的可用空间,如果没有,则显示警告。

任务计划程序

您可以根据计划执行 PowerShell 脚本:

  • 打开任务计划程序
  • 创建新任务 → “操作”选项卡

指定以下内容:

  powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Hello.ps1"  
  • 配置基于时间或事件的触发器。

用户管理

本地用户:

  $pass = Read-Host -AsSecureString "Введите пароль"
New-LocalUser -Name "TestUser" -Password $pass -FullName "Тестовый пользователь"
Disable-LocalUser -Name "TestUser"
Remove-LocalUser -Name "TestUser"  

Active Directory(带CSV文件):

  Import-Csv users.csv | ForEach-Object {
    New-ADUser -Name $_.Name -SamAccountName $_.Login `
    -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) -Enabled $true
}  

Windows 事件监视

  Get-WinEvent -LogName System -MaxEvents 10 |
Format-Table TimeCreated, Id, Message  

过滤:

  Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000; StartTime=(Get-Date).AddDays(-1)}  

导出为 CSV:

  ... | Export-Csv "C:\Logs\app.csv" -NoTypeInformation  

备份与存档

  $src = "C:\Important"
$dst = "D:\Backup\Backup_$(Get-Date -Format 'yyyyMMdd').zip"
Compress-Archive -Path "$src\*" -DestinationPath $dst

Add-Content "D:\Backup\backup_log.txt" "Backup: $(Get-Date) → $dst"  

此脚本从一个文件夹创建一个文件并记录备份。

通过电子邮件发送通知

  Send-MailMessage -From "admin@domain.com" -To "team@company.com" `
 -Subject "Backup report" -Body "Backup completed successfully." `
 -SmtpServer "smtp.domain.com" -Attachments "D:\Backup\*.zip"  

与持续集成/持续交付(CI/CD)和云集成

  • 您可以在 GitHub Actions、Azure Automation Runbooks 或 VPS SSD 中使用 PowerShell。

GitHub Actions 示例:

  - name: Run PowerShell script
  run: pwsh ./monitor.ps1  
  • 在 Azure 中,您可以根据计划使用 RBAC 和执行日志运行脚本。

PowerShell 不仅仅是一个 shell,还是一个通用自动化工具。您将通过实际示例快速掌握基础概念,包括备份和删除旧文件以及运行程序。重要提示:请始终使用 -WhatIf 参数或在测试环境中测试脚本,以避免意外更改。