通过任务计划程序运行时,Powershell脚本停止工作

use*_*407 5 excel powershell scripting

我正在运行下面的脚本作为计划任务,用户登录服务器.它使用Excel.ApplicationCOM对象将xls文件转换为csv .转换工作,但最终打破,我不知道为什么.

我有任务运行以下命令,理论上它应该允许它不断运行:

powershell.exe -noexit -file "filename.ps1"

有什么想尝试的想法?

$server = "\\server"
$xls = "\path\XLS\"
$csv = "\path\CSV\"
$folder = $server + $xls
$destination = $server + $csv

$filter = "*.xls" # <-- set this according to your requirements

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true # <-- set this according to your requirements
    NotifyFilter = [IO.NotifyFilters]"FileName, LastWrite"
}

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

    $path = $Event.SourceEventArgs.FullPath
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated

    $excelFile = $folder + $name
    $E = New-Object -ComObject Excel.Application
    $E.Visible = $false
    $E.DisplayAlerts = $false
    $wb = $E.Workbooks.Open($excelFile)

    foreach ($ws in $wb.Worksheets) {
        $n = "output_" + $name -replace ".XLS"
        $ws.SaveAs($destination + $n + ".csv", 6)
    }

    $E.Quit()     
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*ayL 1

我正在用文字做类似的事情。我一个人用不了Quit。我认为使用Quit隐藏Excel。尝试使用以下方法释放 com 对象:

$E.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($E)
Remove-Variable E
Run Code Online (Sandbox Code Playgroud)

我不知道您是否正在打开 Excel 应用程序,但如果您是,您也许可以使用

$wb.close($false)
Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效...

参考: https: //technet.microsoft.com/en-us/library/ff730962.aspx ?f=255&MSPPError=-2147217396