2016-11-15 73 views
0

开始,所以从来就得到了一个PowerShell脚本,如果一个文件夹是在一个特定的目录中创建,检查,然后做的东西与文件夹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> 

} 

手动启动此脚本可以很好地工作,但使用Task Scheduler运行它不起作用。

首先,我试着直接启动脚本,它显示脚本已成功启动,但没有发生任何事发生-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:\工作完全正常

+0

写入到C盘根:驱动器需要提升的权限。该任务是否设置为仅在用户登录时运行?如果不是,那么您需要在任务中设置凭据,并且如果您要检查的文件夹是网络驱动器,则需要使用UNC路径。 – Squashman

+0

忘记添加:Task Schedular设置为以具有管理员权限的用户身份运行脚本,因为无法工作的操作需要这些操作,写入C:\完全正常。 –

+1

您是否知道'FileSystemWatcher'死于创建它的过程? – PetSerAl

回答

0

好吧,我发现我的错误

作为@PetSerAl建议我忘记了FileSystemWatcher仅在该脚本的一个特定过程的范围内起作用。脚本已成功启动作业,但在关闭脚本的过程(也就是我启动脚本的窗口)后,作业中断,因为它不能再引用FileSystemWatcher

添加喜欢简单的东西:

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

工作完全正常

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 
相关问题