【问题标题】:PowerShell, Exception-Handling: Create custom logfile from Set-ADUserPowerShell,异常处理:从 Set-ADUser 创建自定义日志文件
【发布时间】:2013-08-12 13:39:41
【问题描述】:

我正在尝试在自定义日志文件中记录错误,同时从 Active Directory 对用户进行修改。 代码如下:

Get-ADUser -LDAPFilter "(objectCategory=user)" -SearchScope Subtree -SearchBase $searchBase | Set-ADUser -PasswordNeverExpires 0

当命令遇到错误时,是否可以检查 Set-ADUser 命令是否对每个用户都成功,并将自定义字符串写入自定义日志文件? (例如,访问权限不足)。由于这些错误似乎没有终止,我不知道如何使用 try/catch 解决这个问题。

【问题讨论】:

    标签: powershell exception-handling active-directory


    【解决方案1】:

    enter code here 您可以尝试使用$error 变量来检查每个PasswordNeverExpires 设置期间是否发生错误。

    $log = "C:\LogFile.txt"
    Get-ADUser -LDAPFilter "(objectCategory=user)" -SearchScope Subtree -SearchBase $searchBase `
        | %{
            $error[0] = $null            
            Set-ADUser -PasswordNeverExpires 0
            If($error[0] -eq $null){
                "User:[" + $_.Name + "] PasswordNeverExpires was set successfully" >> $log
            }
            Else{
                "User:[" + $_.Name + "] PasswordNeverExpires Failed to be set, Error:" >> $log
                $error[0] >> $log
            }
          }
    

    【讨论】:

    • 不错的想法,但我有两个建议: 1. 而不是使用$error.Clear(),它会清除 parent 范围内的整个 $error 列表(脚本或函数不会'没有自己的本地范围实例),只需设置$error[0] = $null。 2. 要在日志文件的一行中获取错误,请将 else 块更改为 Write-Output ("User:[" + $_.Name + "] PasswordNeverExpires Failed to be set, Error: " + $error[0].Exception) >> $log
    • 非常感谢您的帮助!非常适合我。只需添加参数 -Identity Set-ADUser -Identity $_ -PasswordNeverExpires 0$error[0] = $null 完美运行。
    【解决方案2】:

    如果您想使用try..catch,您可以通过将-ErrorAction Stop 附加到命令或设置$ErrorActionPreference = "Stop" 来强制错误终止。

    【讨论】:

      【解决方案3】:

      命令 2> Some_log_file 重定向错误。

      例如。

      dir nosuchfile 2> test.txt
      

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 2020-06-29
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多