任务计划程序启动的Powershell脚本无法正常工作

时间:2016-11-15 14:10:15

标签: powershell batch-file scheduled-tasks

所以我有一个powershell脚本,用于检查某个文件夹是否在特定目录中创建,然后对该文件夹执行操作

代码:

echo "$(Get-Date -Format g) - Script started" >> C:\bitlocker.log

$folder = 'C:\Path\To\Check'

$filter = '*.*'           

$fsw = New-Object IO.FileSystemWatcher $folder, $filter 
$fsw.IncludeSubdirectories = $false              
$fsw.NotifyFilter = [IO.NotifyFilters]'DirectoryName' 

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 

   $folderNow = $($EventArgs.FullPath)
   <do stuff now>

}

手动启动此脚本工作正常,但使用任务计划程序运行它不起作用。

首先,我尝试直接启动脚本,该脚本显示脚本已成功启动但未执行任何操作-Action { ... }

然后我尝试制作一个批处理,启动由任务启动的powershell脚本(如How to run a PowerShell script from a batch file所示)

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\PathtoScript\Script.ps1""' -Verb RunAs}"

但问题仍然是一样的。

脚本启动(将一些输出写入文件以检查)但-Action { ... }内的任何内容都没有执行。

编辑:任务计划设置为以具有管理员权限的用户身份运行脚本,因为不起作用的操作需要这些操作,写入C:\完全正常

2 个答案:

答案 0 :(得分:0)

预定任务操作:

程序脚本(使用完整路径):

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

添加参数([NOT]可选):

-NoProfile -NonInteractive -ExecutionPolicy Bypass -File "C:\PathtoScript\Script.ps1" -Any 'other' -arguments 'you need' -should follow

答案 1 :(得分:0)

好的,我发现了我的错误

正如@PetSerAl建议的那样,我忘记了FileSystemWatcher仅在脚本的一个特定进程的范围内行动。脚本已成功启动作业但在关闭脚本的过程(也就是我开始编写脚本的窗口)之后,作业崩溃了,因为它不再引用FileSystemWatcher

添加简单的内容:

Do{
    $JobExist = Get-Job 
} while($JobExist -ne '')

工作得很好