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

相关推荐
woshilys24 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛1 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程2 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo3 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
好像是个likun3 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
Clockwiseee5 小时前
php伪协议
windows·安全·web安全·网络安全
cominglately6 小时前
centos单机部署seata
linux·运维·centos
CircleMouse6 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
程序猿000001号6 小时前
Selenium 深度解析:自动化浏览器操作的利器
selenium·测试工具·自动化
Karoku0667 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes