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

如何调整PowerShell脚本以记录AD组删除结果至日志文件?

PowerShell脚本无法记录AD组删除结果的排查与修复

原脚本存在三个核心问题导致日志写入异常:

  • 对象直接拼接字符串导致日志内容异常:$group是Import-Csv生成的自定义对象,直接和字符串拼接会输出@{Name=组名}这类格式而非实际组名,必须使用$group.Name获取组名称。
  • Remove-ADGroup未触发终止错误:默认情况下,Remove-ADGroup遇到组不存在等错误时仅输出非终止错误,不会进入catch块,需要添加-ErrorAction Stop参数强制抛出终止错误,才能被try/catch捕获。
  • StreamWriter使用冗余:PowerShell原生提供Add-Content、Out-File等更易用的文件写入命令,无需手动管理StreamWriter的打开和关闭,降低出错概率。

修复后的脚本(保留原结构)

$adgroups = Import-Csv "c:\test\groups.csv"
$logfile = 'C:\test\process.txt'
$Stream = [System.IO.StreamWriter]::new($logfile)

foreach ($group in $adgroups) {
    try {
        # 添加-ErrorAction Stop确保错误进入catch块
        Remove-ADGroup -Identity $group.Name -ErrorAction Stop
        $successMsg = "$($group.Name) 已成功删除"
        Write-Host $successMsg
        $Stream.WriteLine($successMsg)
    } catch {
        $errorMsg = "$($group.Name) 删除失败,错误信息:$($_.Exception.Message)"
        Write-Host $errorMsg
        $Stream.WriteLine($errorMsg)
    }
}
$Stream.Close()

更简洁的PowerShell原生写法

无需手动管理StreamWriter,直接用Add-Content写入日志:

$adgroups = Import-Csv "c:\test\groups.csv"
$logfile = 'C:\test\process.txt'
# 清空原有日志文件(可选)
if (Test-Path $logfile) { Clear-Content $logfile }

foreach ($group in $adgroups) {
    try {
        Remove-ADGroup -Identity $group.Name -ErrorAction Stop
        $successMsg = "$($group.Name) 已成功删除"
        Write-Host $successMsg
        Add-Content -Path $logfile -Value $successMsg
    } catch {
        $errorMsg = "$($group.Name) 删除失败,错误信息:$($_.Exception.Message)"
        Write-Host $errorMsg
        Add-Content -Path $logfile -Value $errorMsg
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:28:12