1

我有一个计划任务集,要在一夜之间在机器上运行。此任务将遍历一个文件夹,打印其中找到的所有文件。我可以在登录时毫无问题地运行该过程,但是在通过计划任务运行时它不会打印。

更多信息:

计划任务执行一个 powershell 脚本,该脚本执行多种功能,例如生成和通过电子邮件发送报告、跨网络文件夹复制文件以及最终打印文件夹的内容。如果执行帐户当前已登录,则所有这些任务都将正确执行。如果该帐户未登录并通过计划任务运行,则除 Office 和 PDF 文档的打印之外的所有内容都可以正常工作(文本文档打印正常)。

这是我用来打印文档的功能。

Function Print-File($file)
{
    begin
    {               
        function internal-printfile($thefile)
        {    
            if ($thefile -is [string])
            {
                $filename = $thefile 
            }     
            else 
            { 
                if ($thefile.FullName -is [string] )
                { 
                    $filename = $thefile.FullName 
                } 
            }

            $start = new-object System.Diagnostics.ProcessStartInfo $filename
            $start.Verb = "print"
            [System.Diagnostics.Process]::Start($start)                     
        }

        if ($file -ne $null) 
        {
            $filespecified = $true;
            internal-printfile $file
        }
    }     
    process
    {
        if (!$filespecified)
        {
            $test = write-Host process ; internal-printfile $_

        } 
    }
}

从计划任务运行时,当我将输出转储到文本文件时,我可以看到进程启动(Winword 或 AcroRd32),但是我没有看到任何打印内容。我注意到的另一个区别是,当我在登录 Adob​​e 阅读器(Office 应用程序)以外的应用程序时使用此功能时,开始打印文档然后关闭。但是,当从计划任务运行时,应用程序不会自行关闭。

目前,我将不胜感激任何反馈、建议或指示,因为我已经碰壁了,因为我知道我还能检查什么。我也会就完成文件打印的替代方法提出建议。(注意:我无法预测文件夹中的文件类型)

注意:这些症状出现在两台机器上,即 Windows server 2008 和 Windows 7,它们都运行 Office 2007 和 Adob​​e Reader 10.1.7

4

3 回答 3

0

我正在尝试做与您尝试相同的事情。我很确定您遇到的是会话 0 隔离。您可以在此MSDN 站点和Windows 博客文章中阅读有关它的更多信息。

我没有尝试过以下关于 SO 的另一个问题的答案中的建议,但它可能值得一试。 为会话 0 创建桌面文件夹

这是另一个在没有用户登录机器的情况下尝试打印的人。有人声称知道如何做我们都想做的事情,但他实际上并没有发布答案。

于 2014-01-02T18:34:13.653 回答
0

不确定您是否找到了解决方案,但碰巧任务计划程序作业要使用的打印机应该在以下位置注册:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers(本地打印机)

对比

HKEY_Current_User\Printers\Connections(会话打印机)

于 2016-10-04T20:43:24.890 回答
0

对于 OP 来说为时已晚,但对于未来的读者来说……我遇到了同样的问题,但使用的是 windows shell .bat 文件,而不是 PowerShell。作为计划任务,该脚本将启动 AcroRd32.exe /t,但它不会打印任何内容。然后在延迟之后,Acrobat 停止,文件被移动到“打印”文件夹,就像一切都很好。它可以很好地独立打印,而不是作为计划任务。

(背景:我在一台较旧的计算机上运行 Windows 10 x86,以便我们可以使用我们的两台防弹 HP LaserJet 1000 打印机。但是,我们在 Win 7 中使用的程序 batchdocprint 与 Win 10 不兼容,该公司是走了。由于必须学习晦涩难懂的语法和变通方法,我在几个小时内花费了更多的钱让几行代码(如下)正常工作,而不是程序成本,但我找不到合适的替代品。我发现打印不正确,或者只有一台打印机的选项。)

对我来说,问题似乎确实是会话 0 隔离阻止了 GDI+。我接受了获取 Foxit Reader 的看似“垃圾邮件”的建议。它有效,并且像 Acrobat 一样,阅读器是免费的。我刚刚将 AcroRd32.exe 的路径替换为 FoxitReader.exe 的路径

我认为 Acrobat Reader 永远不可能做到这一点。CLI 不受官方支持,因此 Adob​​e 在不启动 GUI 的情况下将其更改为打印的可能性很小。

至于其他文件类型,这取决于您使用什么来打印它们,以及它是否可以在没有 GUI 的情况下打开和打印。我还没有决定是否为其他常见文件类型实现此功能,以便我们可以拖放,或者继续强制用户使用设置为将 PDF 保存在热文件夹中的 Acrobat PDF 打印机。现在,是后者。

我的代码供参考,希望可以避免其他人的头痛。我只更改/缩短了名称,并删除了第二个文件夹/打印机的重复代码。请注意,taskkill 需要管理权限。此外,您可能需要在常用文件夹中有一个名为“Printed”的文件夹,因为我不检查它的存在:

@ECHO OFF
REM Monitors folders for PDF's and prints.
REM Use PING for delay - no built-in sleep functionality.
REM Using START backgrounds the process so the script can move on.

:LOOP
cd C:\Hot Folder\

for %%a in ("*.pdf") do (
    start "" "C:\Path\To\FoxitReader.exe" /t "C:\Hot Folder\%%a" "HP 1000" 
    ping 1.1.1.1 -n 2 -w 5000 >NUL
    taskkill /IM FoxitReader.exe /F
    move /Y "%%a" ".\Printed\%%a")

ping 1.1.1.1 -n 2 -w 5000 >NUL

goto LOOP
于 2016-06-14T18:45:03.610 回答