如何使用PowerShell打开包含AutoOpen宏的文档?

gro*_*rom 6 powershell ms-word

我当前的PowerShell脚本:

$document = "C:\\test.doc"
$word = new-object -comobject word.application
$word.Visible = $false
$word.DisplayAlerts = "wdAlertsNone"
$word.AutomationSecurity = "msoAutomationSecurityForceDisable"
$doc = $word.Documents.Open($document)
$word.ActivePrinter = "\\http://ptr-server:631\pdf-printer"
$background = $false
$doc.PrintOut([ref]$background)
$doc.close([ref]$false)
$word.quit()
Run Code Online (Sandbox Code Playgroud)

但它会生成一个警告框.此项目的宏被禁用.请参阅主机应用程序的联机帮助或文档以确定如何启用宏.

如何在不运行AutoOpen宏或显示任何类型的对话框提示的情况下打开文档?

环境细节:

  • Word 2003 SP3
  • Windows Server 2003 R2 - 标准版 - Service Pack 2
  • Powershell版本1.0

Tod*_*ain 4

事实证明,这在 VB.NET 中比在 C# 中容易得多(我一直无法弄清楚)。但您所需要做的就是创建一个具有单个例程的控制台应用程序。以下是说明:

代码

Imports word = Microsoft.Office.Interop.Word
Module Module1
    Sub Main()
        Dim args() As String = Environment.GetCommandLineArgs
        Dim path = args(1)
        Dim printer = args(2)
        Dim wordApp As word.Application = New word.Application
        wordApp.WordBasic.DisableAutoMacros(1)
        wordApp.Visible = False
        Dim doc As word.Document = wordApp.Documents.Open(path)
        wordApp.ActivePrinter = printer
        Dim background As Object = False
        doc.PrintOut(background)
        doc.Close(False)
        wordApp.WordBasic.DisableAutoMacros(0)
        wordApp.Quit()
    End Sub
End Module
Run Code Online (Sandbox Code Playgroud)

重新创建解决方案的步骤:

  1. 打开 VS2008 并在 VB.NET 中创建一个新的控制台应用程序。
  2. 设置对Microsoft.Office.Interop.Word(版本 11)的引用
  3. 删除其中的任何代码Module1并插入上面的代码。
  4. 保存项目并将其命名为“wordprinter”。构建项目。
  5. 导航到 Release 文件夹并获取“wordprinter.exe”并将其放在您喜欢的任何位置。这将是你的$wordprinterpath
  6. 记下文档和打印机的路径。这将分别是您的$doc$printer
  7. 在PS中输入以下内容:
        $wordprinterpath = "C:\\path\\wordprinter.exe"
        $doc ="""C:\\Users\\me\\Documents\\您的 doc.doc"""
        $printer = "\\http://ptr-server:631\pdf-printer"
        调用表达式“$wordprinterpath $doc $printer”| 空值

你应该很高兴去追求这个。我还没有测试它的打印部分,所以这可能需要一些工作,但是禁用自动宏并打开文档是可行的。