求助:如何用Export-Csv导出无法重命名的计算机列表
批量计算机重命名脚本优化
原脚本已支持延迟执行与从CSV读取计算机列表,以下是添加失败记录导出和原CSV状态标记的优化版本:
$Credential = Get-Credential $ComputerListPath = '\Shares\Scripts\computers.csv' $FailedComputersPath = '\Shares\Scripts\failed_renames.csv' $ComputerList = Import-Csv -Path $ComputerListPath $end = Get-Date "2024/06/11 06:00:00" # 存储所有机器的重命名结果(用于更新原CSV) $allResults = @() # 存储失败的机器记录 $failedResults = @() # 等待到指定执行时间 while ((Get-Date) -lt $end) { Start-Sleep 3600 } foreach ($Computer in $ComputerList) { # 初始化当前机器的结果对象 $currentResult = [PSCustomObject]@{ oldname = $Computer.oldname newname = $Computer.newname Status = "Pass" } try { # 执行重命名操作,强制捕获所有错误 Rename-Computer -ComputerName $Computer.oldname -NewName $Computer.newname ` -DomainCredential $Credential -Force -Restart -ErrorAction Stop } catch { # 更新状态为失败,输出警告信息 $currentResult.Status = "Fail" $errorMsg = "[$($Computer.oldname)] 重命名失败:$($_.Exception.Message)" Write-Warning $errorMsg # 记录失败机器的详细信息 $failedResults += [PSCustomObject]@{ oldname = $Computer.oldname newname = $Computer.newname ErrorMessage = $_.Exception.Message } } # 将当前机器结果加入总集合 $allResults += $currentResult } # 更新原CSV文件,添加Status列标记结果 $allResults | Export-Csv -Path $ComputerListPath -NoTypeInformation -Force # 导出失败机器列表(仅当存在失败记录时) if ($failedResults.Count -gt 0) { $failedResults | Export-Csv -Path $FailedComputersPath -NoTypeInformation -Force Write-Host "已导出 $($failedResults.Count) 台失败机器记录到 $FailedComputersPath" } else { Write-Host "所有计算机重命名操作完成,无失败记录" }
核心功能说明
- 状态标记:为每台计算机生成包含
oldname、newname、Status的结果对象,最终覆盖写入原CSV,直接查看每台机器的重命名结果 - 错误捕获与警告:通过
try/catch捕获离线、权限不足等所有重命名失败场景,实时用Write-Warning输出错误详情 - 失败记录导出:单独生成
failed_renames.csv,包含失败机器的旧名、新名和具体错误原因,无需逐一验证每台机器状态
内容的提问来源于stack exchange,提问作者Gyndius
相关产品推荐
相关产品推荐

