【问题标题】:Run PowerShell Script within Windows 10 service to convert docx to pdf在 Windows 10 服务中运行 PowerShell 脚本以将 docx 转换为 pdf
【发布时间】:2020-01-15 09:45:05
【问题描述】:

我有一个将 docx 转换为 pdf 的 powershell 脚本。在 Windows 10 上的用户会话中运行时,它运行没有问题。但是,我需要在 Windows 服务中运行它。

$docx_filename = 'C:\temp\doc2pdf.docx'
$pdf_filename = 'C:\temp\doc2pdf1.pdf'

$word_app = New-Object -ComObject Word.Application

$document = $word_app.Documents.Open($docx_filename)
$document.SaveAs([ref] $pdf_filename, [ref] 17)
$document.Close()

$word_app.Quit()

使用以下命令调用脚本

powershell.exe -executionpolicy Bypass -NoProfile -NoLogo -NonInteractive -WindowStyle Hidden -File -File "docx2pdf.ps1" -docxFilename "docx2pdf.docx" -pdfFilename "docx2pdf.pdf"

使用 PSSet-Debug -Trace 2 会记录以下内容

DEBUG:   14+   >>>> $word_app = New-Object -ComObject Word.Application
DEBUG:     ! SET $word_app = 'Microsoft.Office.Interop.Word.ApplicationClass'.
DEBUG:   16+   >>>> $document = $word_app.Documents.Open($docxFilename)

如何让它在 Windows 10 服务中工作?

谢谢

【问题讨论】:

    标签: powershell windows-services


    【解决方案1】:

    您必须创建一个可以像这样触发 powershell 脚本的批处理文件:

    @echo off 
    Powershell.exe set-executionpolicy remotesigned -File ScriptPath
    

    将其另存为“startps.bat”

    然后,您可以使用 sc 命令创建 Windows 服务,方法是像这样提及这个批处理文件路径:

    Sc create PSScriptService Displayname= "What you like" binpath= "Startps.bat" start= auto
    

    【讨论】:

    • 问题不在于创建服务。这行得通。尝试执行 New-Object -ComObject Word.Application 语句时,powershell 脚本挂起。
    【解决方案2】:

    您必须在service's Log On tab 上设置一个帐户。请务必指定一个您可以交互登录并成功运行 Powershell 脚本的帐户(即您安装 Word 的位置)。

    但即使进行了更改,您仍可能会遇到麻烦,因为 Office 是 not entirely suitable for operation in a Windows Service。有些事情有效,但有些事情却没有。试试看,让我们知道您的进展情况。

    【讨论】:

    • 服务已经在与我以交互方式运行脚本时相同的用户上下文中运行。
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2011-08-21
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多