作为服务问题运行的批处理文件中的Powershell

时间:2016-11-04 15:33:03

标签: windows powershell batch-file scheduled-tasks windows-server-2012

公开 我是一个不得不习惯在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我需要这些脚本同时运行。

1 个答案:

答案 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所以很荣幸。