公开 我是一个不得不习惯在Windows环境中工作的PHP / Linux开发人员,所以我很遗憾在这个问题中缺少一些基本的东西。我已经研究过这个问题并且无法确定解决方案。感谢您的高级帮助。
我有一个批处理文件调用PowerShell脚本,该脚本在窗口的任务调度程序启动时无法正常工作,但在手动启动时效果很好。
下面是批处理文件正在启动的Powershell脚本......
$WatchFolder = '\\networkshare\foldername'
$Filter = '*.csv'
$fsw = New-Object IO.FileSystemWatcher $WatchFolder, $Filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters] 'LastWrite'}
Register-ObjectEvent $fsw Changed -SourceIdentifier SAS_Poll_FileChanged -Action {
$WatchFolder = '\\networkshare\foldername'
$OutputFolder_one = '\\networkshare\outputFolder_One'
$OutputFolder_two = '\\networkshare\outputFolder_Two'
$name = $Event.SourceEventArgs.Name
$lock_file = $WatchFolder + '\.' + $name + '.lock'
$test = (Test-Path "$lock_file")
if ( $test ){
return
} else {
Set-ExecutionPolicy -Scope CurrentUser Bypass
Out-File -FilePath "$lock_file"
Start-Process powershell -ArgumentList ".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file" -NoNewWindow
}
}
我知道问题出现在以下一行......
Start-Process powershell -ArgumentList ".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file" -NoNewWindow
当触发事件时(通过任务调度程序启动脚本时)我知道这个b / c,创建锁文件然后进程挂起。
因此我认为这个问题与我调用的第二个PowerShell脚本的路径有关,但我不知道如何修复它。我尝试过使用第二个脚本的完整路径,但还没有能够使它工作。
为了给你一些脚本的更多上下文,事件进程旋转一个新的PowerShell脚本是很重要的b / c我需要这些脚本同时运行。
答案 0 :(得分:1)
很明确问题出在您的参数列表中,现在您传递的是包含其中所有内容的单个字符串,将其更改为数组并且事情应该正常工作。
所以转换
2015-10-05 4:00: 20 events
2015-10-05 4:15: 50 events
2015-10-05 4:30: 61 events
要
".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file"
给出一个镜头并让我们知道它是否适合你,也想说你的代码令人印象深刻,因为它是相对较新的PowerShell所以很荣幸。