我终于完成了我正在编写的脚本,其中包括获取AD用户列表并导出到CSV,通过电子邮件发送多个具有特定信息块的人员,然后修改用户帐户上的注释。当我在ISE中运行它时,该脚本运行正常,完全没有问题。
当我尝试将其作为计划任务运行时,除set-aduser命令外,一切正常。生成CSV导出,在我的日志记录中捕获任何其他错误,发送电子邮件,但set-aduser似乎没有运行。我一直无法捕获任何错误或输出,只是当我去查看AD帐户时,笔记没有更新。再次,当我在ISE中运行它时,它工作正常。我逐步完成了代码的每个部分,然后点击set-aduser并在ISE中设置注释。我不认为这是我的脚本的问题,但是我在下面复制了一个通用块。我的捕获块永远不会捕获任何东西,即使我添加了-erroraction stop。
$errorlog = 'c:\Error.txt'
$file = Import-csv 'c:\Test.csv'
$errordate = get-date
foreach ($name in $file)
{
$newnotes = "$($name.notes) `r`n NewNotesHere"
$NotesUserName = $name.sAMAccountName
try
{
##Set the notes for the user
set-aduser -Identity $NotesUserName -Replace @{info="$newnotes"}
}
catch
{
##Non terminating catch, used only for error logging.
$ErrorName = $Error[0].exception.GetType().fullname
$ErrorDescription = $Error[0].exception.Message
$ErrorLineNumber = $Error[0].InvocationInfo.ScriptLineNumber
$ErrorOffsetLineNumber = $Error[0].InvocationInfo.OffsetInLine
Write-host "Something went wrong setting the notes for $NotesUserName... `r`n $ErrorName `r`n $ErrorDescription `r`n $ErrorLineNumber -- $ErrorOffsetLineNumber `r`n`r`n" -foregroundcolor Yellow
"$errordate `r`n Something went wrong setting the notes for: `r`n $($name.firstname) $($name.lastname) -- Username: $($name.username)... `r`n $ErrorName `r`n $ErrorDescription `r`n `r`n" | Out-file -filepath $ErrorLog -append
}
}
计划任务在Windows Server 2012 R2计算机上运行,具有域管理员帐户(我用于在ISE中成功测试它的帐户),格式如下:
在ISE中运行它并将其作为计划任务运行之间我可以看到的唯一区别是它是一个计划任务。
我认为我最大的问题是:是否对计划任务有某种控制会阻止PowerShell修改Active Directory?
第二个问题:是否有障碍,是否有人建议如何纠正这种行为?
答案 0 :(得分:1)
在您的情况下,我可以看到您没有提及执行政策。这可能是问题之一。尝试绕过,如下所述。
尝试直接从cmd提示符运行脚本并查看结果。 这些是选项。刚刚打了powershell /?
sidebar {background: red; }
我遇到的主要观察结果很少:
1)不要只提供powershell.exe,而是尝试提供完整的PS路径C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
2)许可是另一个问题。您运行任务的用户可能没有运行该任务的权限。
3)执行政策 - 确保使用-executionpolicy bypass绕过执行政策
4)确保您正在运行具有最高权限的任务
5)最后,通过分析日志
希望它有所帮助。
答案 1 :(得分:0)
事实证明,它根本不是PowerShell问题,我们遇到了域控制器问题。所以它正在更新,但没有什么是复制的,所以当拉动用户帐户时,它看起来似乎没有更新。