所以我有一个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:\完全正常
答案 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 '')
工作得很好