starxzj 发表于 2018-9-1 12:16:02

Powershell批量转换PPT文件为PDF文件

  http://www.jaapbrasser.com/
  需求就是批量转换大量的PPT文件为PDF文件,如果手动一个个文件打开再另存为,也可以实现,这样会花费比较长的时间,当然,一个POWERSHELL人员会用另一种思维来解决。

  其实有很多PPT文件,涉嫌个人工作,故略去。
  打开一个ISE,记住一定要用管理员权限打开,否则执行代码时会出错。
Get-ChildItem -Path 'C:\Work file\test\HD 工作文档\运维类\Report' -Filter *pptx -Recurse |  
ForEach-Object -Begin {
  
    $null = Add-Type -AssemblyName Microsoft.Office.Interop.powerpoint
  
    $SaveOption = ::ppSaveAsPDF
  
    $PowerPoint = New-Object -ComObject "PowerPoint.Application"
  
} -Process {
  
    $Presentation = $PowerPoint.Presentations.Open($_.FullName)
  
    $PdfNewName = $_.FullName -replace '\.pptx$','.pdf'
  
    $presentation.SaveAs($PdfNewName,$SaveOption)
  
    $presentation.close()
  
} -end{
  
    $powerpoint.quit()
  
    Stop-Process -name POWERPNT -Force
  执行一下,看结果。

  当时出错,是我把进程名POWERPNT,写成了PONWERPOINT了
  再用脚本看看执行结果:
foreach ($Extension in ('pptx','pdf')) {  
    Get-ChildItem -Path 'C:\Work file\test\HD 工作文档\运维类\Report' -File -Filter "*$Extension" -Recurse |
  
    Measure-Object -Property Length -Sum | ForEach-Object {
  
      @{
  
            'SizeinMB'= ::Round($_.Sum/1MB,2)
  
            'Extension' = $Extension
  
      }
  
    }
  
}
  PS C:\> foreach ($Extension in ('pptx','pdf')) {
  Get-ChildItem -Path 'C:\Work file\test\HD 工作文档\运维类\Report' -File -Filter "*$Extension" -Recurse |
  Measure-Object -Property Length -Sum | ForEach-Object {
  @{
  'SizeinMB'= ::Round($_.Sum/1MB,2)
  'Extension' = $Extension
  }
  }
  }
  SizeinMB Extension
  -------- ---------
  134.14 pptx
  74.93 pdf
  这里面有一个很重要的调用对像的方法,就是:
$null = Add-Type -AssemblyName Microsoft.Office.Interop.powerpoint  这个方法$null 这个解释起来是一个空封装到一个空对像的引用,目前只能是大概知道这种方法,以前测试过代码对OFFICE对像的引用总是出错,有可能是调用方法不对。当然,还会对OFFICE对像的调用做进一步的研究。


页: [1]
查看完整版本: Powershell批量转换PPT文件为PDF文件