繁体   English   中英

由Task Scheduler启动的Powershell脚本不起作用

[英]Powershell Script started by Task Scheduler not working

所以我有一个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脚本的批处理,该脚本由Task启动(如此处的建议如何从批处理文件运行PowerShell脚本

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

但是问题仍然是一样的。

脚本启动(将一些输出写入文件以进行检查),但-Action { ... }内部-Action { ... }执行任何操作。

编辑:Task Schedular设置为以具有管理员特权的用户身份运行脚本,因为不起作用的操作需要这些操作,写入C:\\可以很好地工作

计划任务动作:

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

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

好吧,我发现了我的错误

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

添加一些简单的内容,例如:

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

工作得很好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM