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

远程PowerShell创建域控制器:重启引发的远程处理失败报错问询

问题分析与解决方案

第一个报错的根本原因

当你在Invoke-Command的远程脚本块内执行Restart-Computer -Force时,服务器重启会直接终止所有运行中的进程,包括承载PowerShell远程会话的WinRM服务及相关进程。这会导致本地发起的Invoke-Command无法正常接收远程端的会话结束信号,从而触发**"I/O操作因线程退出或应用请求而中止"**的报错——这个错误本质是远程会话被强制中断的正常结果,而非脚本逻辑错误。

第二个权限拒绝报错的关联原因

将重启操作移出Invoke-Command后出现的权限拒绝,是因为服务器刚完成AD林创建,处于从本地服务器向域控制器切换的过渡状态:

  • 此时域环境尚未完全初始化,WMI服务的权限配置还未完成域模式的更新
  • 本地管理员凭据在域控制器上的远程访问权限会被AD安全策略覆盖,导致无法通过WMI获取LastBootUpTime

而如果在Invoke-Command块内本地重启,服务器重启后域环境已完成初始化,后续远程操作就能正常使用凭据访问。

优化后的脚本方案

方案1:抑制会话中断的预期错误

既然第一个报错是会话中断的正常结果,可以直接抑制该错误,同时保留本地重启的逻辑:

Invoke-Command -ComputerName $IP -Credential $AdminCred -ScriptBlock {
    Write-Output "Promoting to Primary Domain Controller... "
    Install-ADDSForest -DomainName $using:Domain -InstallDNS -NoRebootOnCompletion -Force -SkipPreChecks -SafeModeAdministratorPassword $Using:DomainAdminPass -WarningAction SilentlyContinue

    Restart-Computer -Force
} -ErrorAction SilentlyContinue  # 抑制会话中断的报错

# 等待服务器重启完成的逻辑保持不变
Write-Log "Restarting $HostName... " -NoNewLine

For($i=0; $i -le 360; $i++){
    Write-Progress -Activity "Performing Initial Configuration. This will take approx. 8 minutes" -Status "Working..." -SecondsRemaining (480 - $i)
    Sleep -s 1
}
Write-Progress -Activity "Performing Initial Configuration. This will take approx. 8 minutes" -Completed

# 后续远程重启操作保持不变
Restart-Computer -ComputerName $IP -Credential $AdminCred -Wait -For PowerShell

For($i=0; $i -le 60; $i++){
    Write-Progress -Activity "Finalizing Initial Configuration" -Status "Finalizing..." -SecondsRemaining (60 - $i)
    Sleep -s 1
}
Write-Progress -Activity "Finalizing Initial Configuration" -Completed

方案2:改用远程重启并规避权限问题

如果希望移出重启操作,可以在安装AD林后等待一段时间,让域服务初始化,再用-Protocol WSMan指定远程重启的协议,绕开WMI的权限问题:

Invoke-Command -ComputerName $IP -Credential $AdminCred -ScriptBlock {
    Write-Output "Promoting to Primary Domain Controller... "
    Install-ADDSForest -DomainName $using:Domain -InstallDNS -NoRebootOnCompletion -Force -SkipPreChecks -SafeModeAdministratorPassword $Using:DomainAdminPass -WarningAction SilentlyContinue
}

# 等待AD服务初始化(增加额外等待时间)
Write-Log "Waiting for AD services to initialize... " -NoNewLine
Sleep -s 120

# 使用WSMan协议远程重启,避免WMI权限问题
Restart-Computer -ComputerName $IP -Credential $AdminCred -Wait -For PowerShell -Force -Protocol WSMan

# 后续进度条逻辑保持不变
Write-Progress -Activity "Performing Initial Configuration. This will take approx. 8 minutes" -Status "Working..." -SecondsRemaining 480
For($i=0; $i -le 360; $i++){
    Write-Progress -Activity "Performing Initial Configuration. This will take approx. 8 minutes" -Status "Working..." -SecondsRemaining (480 - $i)
    Sleep -s 1
}
Write-Progress -Activity "Performing Initial Configuration. This will take approx. 8 minutes" -Completed

# 最终初始化等待逻辑保持不变
For($i=0; $i -le 60; $i++){
    Write-Progress -Activity "Finalizing Initial Configuration" -Status "Finalizing..." -SecondsRemaining (60 - $i)
    Sleep -s 1
}
Write-Progress -Activity "Finalizing Initial Configuration" -Completed

内容的提问来源于stack exchange,提问作者Fitzgery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:25:30