如何为成功修改本地用户密码的每台计算机显示进度并输出提示
问题:批量修改本地用户密码时显示进度与成功提示
环境:PowerShell 5.1、Azure DevOps 2020、Windows Server 2016 Standard
需求:
- 为每台成功修改密码的计算机显示进度
- 为每台成功更新LocalUser的计算机输出明确提示信息
现有执行代码:
Invoke-Command -ComputerName Computer1,Computer2 -Credential $credential -ScriptBlock { $securePassword = ConvertTo-SecureString -String 'P@$$w0rd123' -AsPlainText -Force Set-LocalUser -Name User1 -Password $securePassword -Verbose }
解决方案
1. 带进度显示与成功提示的修改代码
通过循环逐个处理计算机、配合进度条命令和异常捕获,实现需求:
$computers = 'Computer1', 'Computer2' $totalCount = $computers.Count $currentIndex = 0 foreach ($computer in $computers) { $currentIndex++ # 显示全局处理进度 Write-Progress -Activity "批量修改本地用户密码" ` -Status "正在处理: $computer ($currentIndex/$totalCount)" ` -PercentComplete (($currentIndex / $totalCount) * 100) try { $remoteResult = Invoke-Command -ComputerName $computer -Credential $credential -ScriptBlock { $securePassword = ConvertTo-SecureString -String 'P@$$w0rd123' -AsPlainText -Force # 强制报错触发捕获逻辑 Set-LocalUser -Name User1 -Password $securePassword -ErrorAction Stop # 返回成功标识与远程计算机名 return @{ ComputerName = $env:COMPUTERNAME Success = $true } } -ErrorAction Stop # 输出成功提示(绿色高亮) Write-Host "✅ 计算机 $($remoteResult.ComputerName) 的User1密码修改完成" -ForegroundColor Green } catch { # 输出失败提示(红色高亮) Write-Host "❌ 计算机 $computer 的User1密码修改失败: $($_.Exception.Message)" -ForegroundColor Red } } # 处理完成后关闭进度条 Write-Progress -Activity "批量修改本地用户密码" -Completed
2. 关键逻辑说明
- 进度显示:用
foreach循环替代批量Invoke-Command,配合Write-Progress实时展示当前处理的计算机、完成数量和百分比 - 成功提示:远程脚本执行成功后返回包含计算机名的哈希表,本地据此输出明确的成功信息
- 异常处理:通过
-ErrorAction Stop强制将修改失败转为可捕获的异常,避免静默失败,同时输出具体错误原因
3. Azure DevOps适配注意事项
- 避免硬编码密码,通过Azure DevOps的变量组或服务连接传入密码和凭据
- Pipeline中执行时,
Write-Host的彩色输出会直接显示在任务日志中(需确保启用彩色日志功能) - 若需将结果同步到Pipeline状态,可添加命令如
Write-Output "##vso[task.setvariable variable=UpdateStatus;]$remoteResult.Success"
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

