使用PowerShell打印文件夹中的所有Excel文件

使用PowerShell打印文件夹中的所有Excel文件,powershell,printing,Powershell,Printing,我有一个PowerShell脚本,我几年前写的,它工作得很好…直到它没有 $shell = New-Object -com Shell.Application $filepath = 'C:\Billing\Clients' $shell.Namespace($filepath).Items() | % { $_.InvokeVerb('Print') } 在C:\Billing\Clients文件夹中,我复制了约100个Excel文件。每个Excel文件都需要按文件名的字母顺序打印

我有一个PowerShell脚本,我几年前写的,它工作得很好…直到它没有

$shell = New-Object -com Shell.Application 
$filepath = 'C:\Billing\Clients' 

$shell.Namespace($filepath).Items() | 
% { $_.InvokeVerb('Print') }
在C:\Billing\Clients文件夹中,我复制了约100个Excel文件。每个Excel文件都需要按文件名的字母顺序打印

直到这个月,这一切都很顺利。我想Excel的更新改变了一切

现在,脚本尝试同时打开和打印所有Excel文件。以前它以串行方式打印文件

这太棒了。现在它使我的系统瘫痪,文件以随机顺序打印


关于如何调用打印操作并在调用下一个文件的打印操作之前等待打印操作完成,您有什么想法吗?

我过去曾使用此方法将文件拉入excel并打印它们。您需要确保先设置默认打印设置,或使用
$xl.ActivePrinter=“PRINTERNAME AS EXCEL查看”
先设置

#Open Excel
$xl = new-object -comobject excel.application
#don't show the window
$xl.visible = $false
#get all of your files
get-childitem "C:\SOME\Path" "*.xlsx" | foreach-object {
    #open file
    $wb = $xl.Workbooks.Open($_.FullName)
    #print with defaults
    $wb.PrintOut()
    #close without saving any changes
    $wb.Close($false)
}
#all done so close excel
$xl.Quit()

我唯一做不到的就是$xl.ActivePrinter命令。我在$xl.visible属性后面放置了右键,并将打印机名称设置为Excel中列出的名称,但没有成功。如果我在“控制面板”中手动设置默认打印机,效果会很好。让打印机正常工作。$xl.ActivePrinter命令正好位于$wb.PrintOut之前。要获取打印机名称,请打开Powershell窗口,并在“控制面板”中将打印机设置为默认值的情况下运行以下操作,以获取正确的名称:$xl=新对象-comobject excel.application$xl.ActivePrinter这将打印出可复制并在脚本中使用的打印名称。