PowerShell 是一种强大的自动化工具和配置管理框架,由微软开发,专为Windows
环境设计。它包含一个命令行壳体和脚本语言,允许系统管理员和开发人员执行管理任务,如自动处理操作系统的配置、管理服务和应用程序,以及处理数据的操作。PowerShell 利用.NET
框架的功能,提供了丰富的命令(称为cmdlets
)和功能,使得用户能够轻松地通过脚本执行复杂的管理任务,提高工作效率和系统的可管理性。
实用脚本示例
示例 1: 检查和更新系统驱动程序
# 检查系统驱动程序更新
Get-WindowsDriver -Online | Where-Object { $_.Version -ne $_.OriginalVersion }
# 更新系统驱动程序(需要手动确认或自动接受)
Update-WindowsDriver -Online -All
示例 2: 获取计算机上所有已登录的用户
# 获取已登录的用户
Get-WmiObject -Class Win32_ComputerSystem | Select-Object UserName
示例 3: 清理磁盘上的临时文件
# 清理临时文件
$folders = @("C:\Windows\Temp\*", "C:\Users\$env:USERNAME\AppData\Local\Temp\*")
Remove-Item $folders -Recurse -Force -ErrorAction SilentlyContinue
示例 4: 创建快捷方式
# 创建一个指向特定程序的快捷方式
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\$env:USERNAME\Desktop\MyShortcut.lnk")
$Shortcut.TargetPath = "C:\Path\To\Your\Application.exe"
$Shortcut.Save()
示例 5: 定期备份数据到网络共享
# 设置备份参数
$source = "C:\Path\To\Backup"
$destination = "\\NetworkPath\Backup"
$exclude = @("*.tmp", "*.log")
# 备份数据
Copy-Item -Path $source -Destination $destination -Recurse -Exclude $exclude
示例 6: 获取网络接口的 IP 地址
# 获取所有网络接口的 IP 地址
Get-NetIPAddress | Where-Object { $_.AddressFamily -eq "IPv4" }
示例 7: 设置和获取环境变量
# 设置环境变量
[Environment]::SetEnvironmentVariable("MyVariable", "MyValue", "User")
# 获取环境变量
[Environment]::GetEnvironmentVariable("MyVariable", "User")
示例 8: 创建计划任务以定期运行脚本
# 创建计划任务以每天运行脚本
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Path\To\Script.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -TaskName "MyDailyTask" -Action $action -Trigger $trigger
# 定义远程计算机名称
$remoteComputer = "RemotePC"
# 定义要执行的命令
$command = { Get-Service | Where-Object { $_.Status -eq "Running" } }
# 使用 Invoke-Command 远程执行命令
Invoke-Command -ComputerName $remoteComputer -ScriptBlock $command
示例 9: 调用外部程序并处理输出
# 调用 ipconfig 并解析输出
$ipconfigOutput = ipconfig /all
$ipconfigOutput | ForEach-Object {if ($_ -match "IPv4 Address") {Write-Host $_.Split(":")[1].Trim()}
}
示例 10: 使用 PowerShell 进行文件压缩和解压缩
# 压缩文件
$source = "C:\SourceFolder"
$destination = "C:\Destination.zip"
Compress-Archive -Path $source -DestinationPath $destination
# 解压缩文件
Expand-Archive -Path $destination -DestinationPath "C:\ExtractedFolder"
示例 11: 检查特定服务状态,如果未运行则启动它
# 设置服务名称
$serviceName = "Spooler"
# 获取服务状态
$service = Get-Service -Name $serviceName
# 检查服务是否正在运行
if ($service.Status -ne "Running") {# 如果服务未运行,则启动它Start-Service -Name $serviceNameWrite-Host "Service $serviceName started."
} else {Write-Host "Service $serviceName is already running."
}
示例 12: 检索系统信息并输出到控制台
# 获取系统信息
$systemInfo = Get-WmiObject Win32_ComputerSystem | Select-Object Name, Manufacturer, Model, TotalPhysicalMemory
# 输出系统信息
Write-Host "System Information:"
$systemInfo | Format-List
示例 13: 检索正在运行的进程列表,并杀死特定的进程
# 获取所有运行的进程
$processes = Get-Process
# 设置要终止的进程名称
$processToKill = "notepad"
# 查找并终止进程
$processes | Where-Object { $_.Name -eq $processToKill } | Stop-Process
Write-Host "Process $processToKill has been terminated."
示例 14: 创建一个文件夹,并在其中创建一个文本文件
# 设置文件夹路径
$folderPath = "C:\MyNewFolder"
# 创建文件夹
New-Item -Path $folderPath -ItemType Directory
# 设置文件路径
$filePath = Join-Path -Path $folderPath -ChildPath "MyNewFile.txt"
# 创建文件并写入内容
"Hello, World!" | Out-File -FilePath $filePath
示例 15: 列出并导出计算机上所有已安装的软件
# 获取已安装的软件
$installedSoftware = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, Publisher, InstallDate, Version
# 导出软件列表到 CSV 文件
$installedSoftware | Export-Csv -Path "C:\InstalledSoftware.csv" -NoTypeInformation
这些示例展示了 PowerShell 在系统管理和自动化任务方面的强大功能。在使用这些脚本之前,确保了解它们的作用,并根据具体需求和环境进行相应的调整。此外,对于涉及系统修改的脚本,建议先在测试环境中验证其行为。