0

披露 我是一名PHP/Linux開發人員,不得不習慣在Windows環境中工作,所以我很好地思考了一些基本問題。我已經研究了這一點,似乎無法找到一個解決方案。感謝您的高級幫助。作爲服務問題運行的批處理文件中的Powershell

我有一個批處理文件,調用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

很確定問題出在你的參數列表上,現在你傳遞了一個包含其中所有內容的單個字符串,將其更改爲一個數組,並且事情應該可以正常工作。

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

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

給一個鏡頭,讓,我們知道,如果你的作品也想說,你的代碼是令人印象深刻的是相對較新的PowerShell所以榮譽大聲笑。

+0

更改參數傳遞給數組是我做錯了所有這一切的兩件事之一。 我遇到的另一個問題是我如何設置計劃任務。在計劃任務的操作中,我刪除了正在調用的腳本的路徑,並將路徑移至「開始」選項。這兩個變化的結合似乎解決了我的問題。 再次感謝您的幫助。我希望自己能夠承認這些代碼的大部分內容,但這真的是對Powershell的敬意,以及該語言的文檔記錄。 –

相關問題