首页 > 解决方案 > Get-Child Item 无法通过任务计划程序工作

问题描述

我正在尝试通过 GPO 部署的计划任务运行此脚本:

$registryPath = 'HKLM:\Software\CC\PST_Discovery_Script\Already_Run'

if  (!(Test-Path -Path $registryPath)) {

            $dir = "c:\Users"
            $ext = "pst" 
            Get-ChildItem "$dir" *$ext -r | Select-Object FullName,LastAccessTime,LastWriteTime,CreationTime,@{N='Owner';E={$_.GetAccessControl().Owner}}, @{Name="MegaBytes"; Expression={"{0:F2}" -f ($_.Length / 1MB)}}, @{N='Hostname';E={$env:computername}} | export-csv "c:\PST_Discovery.csv" -Append -NoTypeInformation 

   New-Item -Path HKLM:\Software\CC\PST_Discovery_Script -Name Already_Run –Force

}

计划任务

如果我通过 Powershell 控制台/ISE 手动运行脚本,但不是通过计划任务运行,它工作正常。

如果我通过计划任务运行它,我知道脚本正在运行,因为它读取注册表项,如果它不存在,它会写入一个注册表项,但它实际上并没有运行 get-childitem 行或导出CSV。

计划任务显示在客户端上,并且使用域管理员凭据运行(我)

编辑:对不起,我的代码格式都出错了,我认为现在应该修复

kaspermoerch:是的,它是域管理员,因此对文件系统具有完全权限

boxdog:我实际上已经将它写入 UNC 共享,但将其更改为本地计算机,因为它无法正常工作。我将尝试输出位置和用户的其他一些组合。

TheIncorrigible:最初它是系统,但它不起作用,所以我编辑了推出的计划任务并使用我的域管理员帐户。

Adam:- 是的,已创建计划任务
- 是的,任务使用以下代码运行脚本:Powershell.exe -ExecutionPolicy Bypass \server1\share1\PST_Discovery_Script.ps1
- 是的,它使用我的 DA凭据运行
- 是的,文件不是已创建,尽管它仍会写入注册表值

我已经检查了计划任务,请参阅我的屏幕截图。我正在提升任务调度程序并手动运行任务。

标签: powershell

解决方案


我复制了您列出的代码格式,对我来说效果很好。

捕获任何错误的快速简便的方法是将错误操作首选项更改为在脚本开始时停止,以便进程在第一个错误时退出,并且任何错误都将流回计划任务的上次运行结果。从那里你应该能够看到异常。

$ErrorActionPreference = 'Stop'

如果您还没有解决它,那至少应该提供一个起点。如果返回 0 以外的任何值,那么您知道构建一些错误处理,try/catch也许还有一个输出日志,以帮助您深入了解它。


推荐阅读