【问题标题】:Powershell in a batch file running as a service issue作为服务运行的批处理文件中的 Powershell 问题
【发布时间】:2016-11-04 15:33:02
【问题描述】:

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

我有一个批处理文件调用了一个 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

我知道当事件被触发时(当脚本通过任务调度程序启动时),锁定文件被创建,然后进程挂起。

因此,我认为该问题与我正在调用的第二个 powershell 脚本的路径有关,但我不知道如何解决它。我尝试使用第二个脚本的完整路径,但无法使其工作。

只是为了给你更多的脚本上下文,事件进程启动一个新的 powershell 脚本是很重要的,因为我需要这些脚本同时运行。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 将参数传递给数组是我在这一切上做错的两件事之一。我遇到的另一个问题是我如何设置计划任务。在计划任务的操作中,我删除了我正在调用的脚本的路径并将路径移动到“开始于”选项。这两个变化的结合似乎解决了我的问题。再次感谢您的帮助。我希望我能将大部分代码归功于我,但这确实是对 Powershell 以及该语言的良好文档的致敬。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多