我的主要目标是通过 PowerShell 打印.PDF
文件。
我可以使用以下行来做到这一点Start-Process $Path -Verb Print
,只要用户的默认.PDF
文件应用程序是 Adobe Acrobat。
因此,为了实现从 PowerShell 打印,这是我预期的脚本伪代码:
- Get user's default app for .pdf
- Set user's default app for .pdf to Adobe Acrobat
- Print the .pdf file
- Set the user's default app for .pdf back to whatever they had it set to originally
但我不知道该怎么做。我最接近的方法是使用ftype
命令提示符命令,但以下是我亲眼目睹的,它并不是一个解决方案:
当我的默认应用程序是 Adobe 时,打印可以正常工作。当我的默认应用程序是 Edge 时,打印不起作用,但返回结果ftype
与我的默认应用程序是 Adobe 时完全相同。
有人知道如何通过 PowerShell 获取/设置默认应用程序吗?
答案1
我建议DanySys 的 Set-FTA
(文件类型关联)为此:
Set-FTA AcroExch.Document.DC .pdf
但是,如果您只想通过 Adobe Reader 打印文件,请尝试以下命令:
# Open and go straight to the print dialog
AcroRd32.exe /p <filename>
答案2
好的,看来更改.pdf
中的默认应用程序Settings
将设置中的值
Computer\HKEY_USERS\[USER-ID]\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice
因此,这是一个 PowerShell 脚本,用于获取用户设置的默认应用的值.PDF
$User = New-Object System.Security.Principal.NTAccount($env:UserName)
$sid = $User.Translate([System.Security.Principal.SecurityIdentifier]).value
$key = "HKU:\${sid}\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice"
if (Get-PSDrive HKU -ErrorAction SilentlyContinue) {
} else {
New-PSDrive HKU Registry HKEY_USERS
}
(Get-ItemProperty -Path $key).ProgId
这使我能够获得默认的名称,如果我进入 RegEdit,并为我的用户删除该项的“设置值”的“拒绝”权限,那么我可以设置它,但默认情况下,用户对该项的权限是被拒绝的。