我无法让原本可以正常运行的 Powershell 脚本按计划运行

我无法让原本可以正常运行的 Powershell 脚本按计划运行

环境:服务器2019 域控制器。

我有一个简单的脚本,可以梳理我的 AD 用户并禁用过去 35 天内未登录的任何人(组织策略)。如下所示:

Get-ADUser -Filter * -Properties Name,Lastlogontimestamp,PasswordNeverExpires | Where-Object {([datetime]::FromFileTime($_.lastlogontimestamp) -le (Get-Date).adddays(-35)) -and ($_.passwordNeverExpires -ne "true") } | Disable-ADAccount

如果我手动运行它,它会起作用 - 快速浏览整个过程,找到 35 天以上未使用过的任何人并将其关闭。

我最初尝试使用任务计划程序直接调用该脚本,但是它不起作用——任务将永远“运行”,但脚本从未执行,因为我知道尚未使用的用户帐户(在手动运行中被标记的帐户,我重新启用以测试计划版本)没有重新禁用。

我尝试修改脚本以关闭执行策略(然后在最后重新打开)但这也没有帮助。

我确实发现这个指导对我有一点帮助: https://community.spiceworks.com/how_to/17736-run-powershell-scripts-from-task-scheduler

我没有调用脚本,而是调用 powershell,然后向其传递 Set-ExecutionPolicy Bypass 和脚本的位置(目前位于 C:\)。这是一个小小的改进,因为虽然脚本仍然没有实际上运行(气压计账户不会再次禁用),任务最终会停止并声称它成功运行(0x1 代码)。

对于它以之运行的域管理员帐户,凭据是正确的,并且它设置为以最高权限运行(尽管我在测试时一直处于登录状态,但我是否已登录)。

我很茫然——每个单独的元素似乎实际上都“起作用”——脚本完全运行,调度程序执行并“完成”——但组合产品却没有。

我哪里做错了?使用批处理文件时我没有遇到过类似的问题,因此我怀疑在使用 PowerShell 执行此操作时我忽略了另一个因素。

答案1

好吧,我似乎明白了。我使用的文章有点误导。

与文章不同,我的“参数”字段不能简单地写成:

Set-ExecutionPolicy Bypass "C:\script.ps1"

相反,您还必须使用 -File 参数,因此“参数”框显示:

Set-ExceutionPolicy Bypass -File "C:\script.ps1"

当我这样做时,它以代码 0x0 结束(这实际上是成功了),并且应该禁用的帐户实际上已被禁用。计划任务运行大约需要 3 分 20 秒(而早期的失败似乎是无限的)。

相关内容