You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为成功修改本地用户密码的每台计算机显示进度并输出提示

问题:批量修改本地用户密码时显示进度与成功提示

环境: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:57:42