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

Powershell in a batch file running as a service issue

披露 我是一名 PHP/Linux 开发人员,必须习惯在 Windows 环境中工作,所以我很可能遗漏了问题中的一些基本内容。我已经对此进行了研究,但似乎无法确定解决方案。感谢您的帮助。

我有一个调用 powershell 脚本的批处理文件,当它被 window 的任务调度程序启动时它不能正常工作,但是当它被手动启动时工作正常。

下面是批处理文件启动的 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 我需要这些脚本 运行 同时。

很确定问题出在您的参数列表上,现在您传递的是一个字符串,其中包含所有内容,将其更改为一个数组,事情应该会正常进行。

所以转换 ".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file"

".\General\PollingProcess-alone.ps1",$WatchFolder,$WatchFolder,etc..

试一试,让我们知道它是否适合您,还想说您的代码令人印象深刻,因为它对 PowerShell 来说相对较新,所以很荣幸。