Jak wykonać polecenie menu kontekstowego z PowerShell?

1

Próbuję przekonwertować plik na pdf, wywołując Shell.Application skojarzony z menu kontekstowym (na przykład po kliknięciu pliku prawym przyciskiem myszy).

Pożyczyłem i poprawiłem kod z innego forum:

$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() } }

Udało się to dokładnie raz, a potem nigdy więcej. Usunąłem wszystkie problemy związane z uprawnieniami związane z GPO i przetestowałem to, uruchamiając znacznie prostszy skrypt ( remove-item "c:\users\MyUserName\downloads\Welcome to NFPA.htm"), który działał idealnie. Mam nadzieję, że jest to prosty problem z formatem / składnią. Czy ktoś wie, dlaczego to może zawieść?

Dziękuję Ci. Nie wiem też, jak sprawić, by ta cholerna rzecz miała ciężkie zwroty. Ale wygłupiłem się po raz pierwszy, zapomniałem przywrócić swoją rzeczywistą nazwę użytkownika.

Zmusiłem go do uruchomienia w PowerShellISE, próbowałem domyślnie ustawić cmd, mimo że powiedziałem to PowerShell.

Teraz, gdy mam to poprawnie, błąd brzmi:

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

Program używany przez polecenie menu kontekstowego to destylator programu Acrobat.

Próbowałem poszukać programu lub polecenia, które faktycznie działa, nie było tam, gdzie powinno być w rejestrze, w rzeczywistości test, który pojawia się w menu kontekstowym „Konwertuj na Adobe PDF”, jest nigdzie w rejestrze.

Dangph - dzięki! Rzeczywiście doszłam do tego samego rozwiązania w domu ostatniej nocy. Jestem gotowy, dziękuję wszystkim!

adriancombe
źródło
jakiego programu używasz do konwersji plików?
Adam Silenko
Co się stanie, gdy spróbujesz to uruchomić. Czy otrzymujesz jakieś błędy? Używasz $file.Verbs(), czy jesteś pewien, że czasownik został faktycznie znaleziony i nadal istnieje dla tego typu pliku? Czasowniki takie jak te często wywołują inne polecenia, być może zamiast próbować uzyskać czasownik z powłoki, powinieneś sprawdzić polecenie, które faktycznie wykonuje, i po prostu wywołać to bezpośrednio?
Zoredache
Acrobat Distiller ma interfejs wiersza poleceń. Nie możesz tego użyć? Zobacz „Opcje wiersza poleceń” w dokumentacji interfejsu API programu Acrobat Distiller.
dangph

Odpowiedzi:

1

Możesz użyć narzędzia wiersza polecenia, takiego jak PDFcreator

pdfcreator.exe /PrintFile="C:\test.doc"
Adam Silenko
źródło
Dzięki. Tyle rzeczy, których mógłbym użyć, gdybym nie był na komputerze rządowym :( W ten sposób szukałem rozwiązania skryptowego.
adriancombe
0

Dodanie obsługi błędów do kodu może pomóc w znalezieniu problemu.

$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'
}
Zoredache
źródło
To było interesujące. Spowodowało to, że w jakiś sposób otworzył monit cmd za pomocą polecenia powershell. Ale po tym nic się nie pokazało i nadal nie ma danych wyjściowych pliku
adriancombe 27.04.17
O wiele lepiej byłoby spróbować edytować / zaktualizować swoje pytanie, a następnie spróbować zrobić to w komentarzu. W komentarzu jest prawie całkowicie nieczytelny.
Zoredache