【发布时间】:2018-05-17 13:01:40
【问题描述】:
我正在尝试通过 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:最初是系统,但无法正常工作,因此我编辑了推送的计划任务并使用我的域管理员帐户。
亚当:
- 是的,计划任务已创建
- 是的,任务使用以下代码运行脚本:Powershell.exe -ExecutionPolicy Bypass \server1\share1\PST_Discovery_Script.ps1
- 是的,它使用我的 DA 凭据运行
- 是的,文件没有创建,虽然它仍然写入注册表值
我已经检查了计划任务,请看我的截图。我正在提升任务调度程序并手动运行任务。
【问题讨论】:
-
您是否检查过运行计划任务的帐户对文件系统具有所需的权限?
-
很可能是权限问题。它是否适用于不同的用户、不同的目标文件夹、不同的 CSV 输出位置等?尝试缩小实际失败的范围,因为似乎有几个可能的地方。
-
$dir = "c:\Users" -
您为什么将它作为您的域帐户(IN A GPO)而不是系统运行? @Matt 在
if语句中定义。
标签: powershell