【PowerShell】巧用 Windows PowerShell 实现自动化

PowerShell 是一种强大的自动化工具和配置管理框架,由微软开发,专为Windows环境设计。它包含一个命令行壳体和脚本语言,允许系统管理员和开发人员执行管理任务,如自动处理操作系统的配置、管理服务和应用程序,以及处理数据的操作。PowerShell 利用.NET框架的功能,提供了丰富的命令(称为cmdlets)和功能,使得用户能够轻松地通过脚本执行复杂的管理任务,提高工作效率和系统的可管理性。

实用脚本示例

示例 1: 检查和更新系统驱动程序

powershell 复制代码
# 检查系统驱动程序更新
Get-WindowsDriver -Online | Where-Object { $_.Version -ne $_.OriginalVersion }
# 更新系统驱动程序(需要手动确认或自动接受)
Update-WindowsDriver -Online -All

示例 2: 获取计算机上所有已登录的用户

powershell 复制代码
# 获取已登录的用户
Get-WmiObject -Class Win32_ComputerSystem | Select-Object UserName

示例 3: 清理磁盘上的临时文件

powershell 复制代码
# 清理临时文件
$folders = @("C:\Windows\Temp\*", "C:\Users\$env:USERNAME\AppData\Local\Temp\*")
Remove-Item $folders -Recurse -Force -ErrorAction SilentlyContinue

示例 4: 创建快捷方式

powershell 复制代码
# 创建一个指向特定程序的快捷方式
$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: 定期备份数据到网络共享

powershell 复制代码
# 设置备份参数
$source = "C:\Path\To\Backup"
$destination = "\\NetworkPath\Backup"
$exclude = @("*.tmp", "*.log")
# 备份数据
Copy-Item -Path $source -Destination $destination -Recurse -Exclude $exclude

示例 6: 获取网络接口的 IP 地址

powershell 复制代码
# 获取所有网络接口的 IP 地址
Get-NetIPAddress | Where-Object { $_.AddressFamily -eq "IPv4" }

示例 7: 设置和获取环境变量

powershell 复制代码
# 设置环境变量
[Environment]::SetEnvironmentVariable("MyVariable", "MyValue", "User")
# 获取环境变量
[Environment]::GetEnvironmentVariable("MyVariable", "User")

示例 8: 创建计划任务以定期运行脚本

powershell 复制代码
# 创建计划任务以每天运行脚本
$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
powershell 复制代码
# 定义远程计算机名称
$remoteComputer = "RemotePC"
# 定义要执行的命令
$command = { Get-Service | Where-Object { $_.Status -eq "Running" } }
# 使用 Invoke-Command 远程执行命令
Invoke-Command -ComputerName $remoteComputer -ScriptBlock $command

示例 9: 调用外部程序并处理输出

powershell 复制代码
# 调用 ipconfig 并解析输出
$ipconfigOutput = ipconfig /all
$ipconfigOutput | ForEach-Object {
    if ($_ -match "IPv4 Address") {
        Write-Host $_.Split(":")[1].Trim()
    }
}

示例 10: 使用 PowerShell 进行文件压缩和解压缩

powershell 复制代码
# 压缩文件
$source = "C:\SourceFolder"
$destination = "C:\Destination.zip"
Compress-Archive -Path $source -DestinationPath $destination
# 解压缩文件
Expand-Archive -Path $destination -DestinationPath "C:\ExtractedFolder"

示例 11: 检查特定服务状态,如果未运行则启动它

powershell 复制代码
# 设置服务名称
$serviceName = "Spooler"
# 获取服务状态
$service = Get-Service -Name $serviceName
# 检查服务是否正在运行
if ($service.Status -ne "Running") {
    # 如果服务未运行,则启动它
    Start-Service -Name $serviceName
    Write-Host "Service $serviceName started."
} else {
    Write-Host "Service $serviceName is already running."
}

示例 12: 检索系统信息并输出到控制台

powershell 复制代码
# 获取系统信息
$systemInfo = Get-WmiObject Win32_ComputerSystem | 
              Select-Object Name, Manufacturer, Model, TotalPhysicalMemory
# 输出系统信息
Write-Host "System Information:"
$systemInfo | Format-List

示例 13: 检索正在运行的进程列表,并杀死特定的进程

powershell 复制代码
# 获取所有运行的进程
$processes = Get-Process
# 设置要终止的进程名称
$processToKill = "notepad"
# 查找并终止进程
$processes | Where-Object { $_.Name -eq $processToKill } | Stop-Process
Write-Host "Process $processToKill has been terminated."

示例 14: 创建一个文件夹,并在其中创建一个文本文件

powershell 复制代码
# 设置文件夹路径
$folderPath = "C:\MyNewFolder"
# 创建文件夹
New-Item -Path $folderPath -ItemType Directory
# 设置文件路径
$filePath = Join-Path -Path $folderPath -ChildPath "MyNewFile.txt"
# 创建文件并写入内容
"Hello, World!" | Out-File -FilePath $filePath

示例 15: 列出并导出计算机上所有已安装的软件

powershell 复制代码
# 获取已安装的软件
$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 在系统管理和自动化任务方面的强大功能。在使用这些脚本之前,确保了解它们的作用,并根据具体需求和环境进行相应的调整。此外,对于涉及系统修改的脚本,建议先在测试环境中验证其行为。

相关推荐
Damon小智13 分钟前
合合信息DocFlow产品解析与体验:人人可搭建的AI自动化单据处理工作流
图像处理·人工智能·深度学习·机器学习·ai·自动化·docflow
wanhengidc1 小时前
网站服务器中的文件被自动删除的原因
运维·服务器
9毫米的幻想1 小时前
【Linux系统】—— 编译器 gcc/g++ 的使用
linux·运维·服务器·c语言·c++
helloliyh1 小时前
Windows和Linux系统安装东方通
linux·运维·windows
LilySesy2 小时前
【业务案例】F.13——SAP系统标准的清帐程序有BUG?
运维·bug·sap·abap·esb·internet服务
张某人想退休2 小时前
自动化实现的思路变化
运维·自动化
m0_748245743 小时前
基于windows的mysql5.7安装配置教程
windows
van叶~3 小时前
Linux探秘坊-------4.进度条小程序
linux·运维·小程序
秋风&萧瑟3 小时前
【数据结构】顺序队列与链式队列
linux·数据结构·windows
代码讲故事7 小时前
从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题
linux·运维·服务器·windows·远程连接·远程桌面·xrdp