如何从 PowerShell 执行上下文菜单命令?

如何从 PowerShell 执行上下文菜单命令?

我正在尝试通过调用与上下文菜单关联的 Shell.Application 将文件转换为 pdf(就像右键单击文件时一样)。

我从另一个论坛借用并调整了一些代码:

$o = new-object -com Shell.Application
$folder = $o.NameSpace("C:\Users\MyUserName\Downloads")
$file=$folder.ParseName("973.xfdl")
$file.Verbs() | %{ if($_.Name -eq 'Convert to Adobe PDF') { $_.DoIt() } }

它只成功运行了一次,之后就再也没有运行过。我清除了与 GPO 相关的所有权限问题,并通过运行一个更简单的脚本 ( remove-item "c:\users\MyUserName\downloads\Welcome to NFPA.htm") 进行了测试,该脚本运行完美。我希望这是一个简单的格式/语法问题。有人知道为什么会失败吗?

谢谢。我也不知道该如何让这个该死的东西有硬回车或什么的。但是,我第一次犯了错误,我忘了把我的真实用户名放回去。

我强迫它在 PowerShellISE 中运行,尽管我告诉它 PowerShell,它仍试图默认为 cmd。

现在我已经正确了,错误内容如下:

PDF Convert verb was not found for this file
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

上下文菜单命令使用的程序是 acrobatstiller。

我试图寻找它实际运行的程序或命令,但它并不在注册表中应该在的位置,事实上,上下文菜单中出现的实际测试“转换为 Adob​​e PDF”并不在注册表中。

Dangph - 谢谢!昨晚我在家里也找到了同样的解决方案。我很好,谢谢大家!

答案1

您可以使用命令行工具,例如 PDFcreator

pdfcreator.exe /PrintFile="C:\test.doc"

答案2

在您的代码中添加一些错误处理,这可能会帮助您找到问题。

$o = new-object -com Shell.Application
$folder = $o.NameSpace("C:\Users\MyUserName\Downloads")
$file=$folder.ParseName("973.xfdl")
[array]$PdfConvertVerb = $file.Verbs() | Where-Object { $_.Name -eq 'Convert to Adobe PDF' }
If ($PdfConvertVerb -eq 1) {
    $PdfConvertVerb[0].DoIt()
} Else {
    Write-Error 'PDF Convert verb was not found for this file'
}

相关内容