我的任务是创建一个可以从命令提示符运行的power shell脚本,该命令提示符将使用Microsoft Word(2013)打开指定的word文档并将其另存为PDF文档。
首次使用PowerShell用户,但我成功创建了一个简短的脚本来完成这项工作,如下所示......
$word=new-object -comobject word.application
$doc=$word.documents.Open("c:\TEST.docx")
$doc.SaveAs([ref]"c:\test.pdf", [ref]17)
$doc.Close()
$word.Quit()
一旦保存为ps1文件,使用以下命令运行时效果很好...
powershell.exe -ExecutionPolicy ByPass -file c:\SaveToPDF.ps1
但是后来我被要求也允许这个脚本在远程计算机上运行。所以我已经开始研究这个功能,并且能够创建另一个电源shell脚本,它将在远程计算机上运行命令行作业,如下所示,它将运行帮助命令
$Username = "Username"
$Password = "PWD123"
$ComputerName = "PC-RemoteApps"
$Script = {help}
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord
$Session = New-PSSession -ComputerName $ComputerName -credential $Cred
$Job = Invoke-Command -Session $Session -Scriptblock $Script
echo $Job
Remove-PSSession -Session $Session
哪个也有效,并且help命令的结果会回显给本地PC。因此,下一步是简单地更改$ Script变量以包含我希望运行的命令,以便将Word文档转换为PDF,如下所示......
$Script = {powershell.exe -ExecutionPolicy ByPass -file c:\SaveToPDF.ps1}
然而,这会产生一个错误(见下文),在远程PC上运行时看到脚本的工作原理并没有多大意义......
您无法在空值表达式上调用方法。
在C:\ SaveToPDF.ps1:4 char:12
$ doc.SaveAs<<<< ([ref]" c:\ test.pdf",[ref] 17)
您无法在空值表达式上调用方法。
在C:\ SaveToPDF.ps1:5 char:11
的$ doc.Close<<<< ()
的我甚至尝试将power shell脚本命令直接包含在远程处理脚本中,如下所示......
$Script = {
$word=new-object -comobject word.application
$doc=$word.documents.Open("c:\TEST.docx")
$doc.SaveAs([ref]"c:\test.pdf", [ref]17)
$doc.Close()
$word.Quit()
}
我仍然得到一个错误,基本上告诉我同样的事情,如下......
您无法在空值表达式上调用方法。
您无法在空值表达式上调用方法。
的我认为好像$ doc变量没有设置为任何东西,因此无法调用SaveAs()和Close()方法。然而,源文件(" c:\ TEST.docx")存在于远程PC上的此位置,并且在远程PC上运行时命令运行正常。
我甚至将测试文件移动到本地和远程PC都具有读写访问权限的网络位置,我仍然得到相同的错误集。
所以在这一点上,我来找你们,看看你是否能让我知道我错过了什么。
希望你能帮忙
由于
卡尔
答案 0 :(得分:0)
很遗憾,您无法使用comobject word.application
或Invoke-Command
创建Enter-PSSession
。 Word或任何其他Office产品依赖于启动其二进制文件的GUI环境。
我真的想用引用来支持这一点,但是我没有任何东西......