2016-11-15 2 views
1

Получил сумасшедший, который вышел из левого поля.Консоль Powershell, вызывающая ошибки сценария

У нас есть файл PDF, который генерируется приложением поставщика, которое необходимо разделить. Я использую iTextSharp.DLL, и он отлично работает, но только в PowerShell ISE. Когда я пытаюсь запустить тот же скрипт через Консоль, он ломается.

Вот вырубить часть сценария

Add-Type -Path ("MyDrive:\MyPath\itextsharp.dll"); 
$pdf = New-Object iTextSharp.text.pdf.PdfReader($sourcePDFFile); 
[iTextsharp.text.Document]$sourcePDF = $pdf.GetPageSizeWithRotation($fromPage); 
$sourcePDF.Open(); 

Когда я запускаю это в Powershell ISE я получаю

2016-11-15T19:17:48 Runnning in Windows PowerShell ISE Host as MYDOMAIN\myuser 
2016-11-15T19:17:48 Opening PDF file 
2016-11-15T19:17:50 Outputting seperated PDF files 
2016-11-15T19:17:51 1 file(s) processed out of 3 

Когда я запускаю это в Powershell консоли я получаю

2016-11-15T19:20:19 Runnning in ConsoleHost as MYDOMAIN\myuser 
2016-11-15T19:20:19 Opening PDF file 
2016-11-15T19:20:21 Outputting seperated PDF files 
2016-11-15T19:20:21 —- Exception Message: 
ErrorRecord : Method invocation failed because [iTextSharp.text.Rectangle] does not contain a method named 'Open'. 

Если я выдаю результаты Get-Member в переменной $ sourcePDF, тип отображается как iTextsharp.text.Documen t при запуске в ISE, но iTextSharp.text.Rectangle при запуске через консоль.

Надеясь, что кто-то может дать мне несколько указателей на то, что вызывает проблему, и как я могу ее решить.

Приветствия Phil

+0

Вряд ли, но, возможно, вы загружаете разные DLL файлы. Однако стоит проверить. –

+0

Также стоит проверить тип переменной '$ pdf'. Я могу представить, что это уже другое. –

+0

Я думаю, что в том же духе, что и у Ливена, вы используете разные архитектуры оболочек в своих примерах выше? – Matt

ответ

0

Спасибо за все ваши идеи. Я решил эту проблему, изменив способ создания переменной.

$sourcePDF = New-Object iTextsharp.text.Document;

вместо

[iTextsharp.text.Document]$sourcePDF = $pdf.GetPageSizeWithRotation($fromPage);

Оказывается, $ pdf.Get ... не требуется для создания новых PDF-файлов.

Приветствия Phil

0

Я подозреваю, что это проблема: PowerShell ISE работает в другом состоянии квартиры. ISE работает в STA. Однако консоль запускается в MTA (в зависимости от версии).

Вы можете проверить состояние квартиры с:

$host.Runspace.ApartmentState 

или

[System.Threading.Thread]::CurrentThread.GetApartmentState() 

Чтобы заставить консоль PowerShell для запуска используется режим STA:

powershell.exe -sta 
+0

Кажется, модель квартиры такая же '2016-11-16T08: 28: 38 в стереосистеме и обновите ConsoleHost в MYDOMAIN \ myuser' ' 2016-11-16T08: 28: 38 Ток в многоквартирном состоянии STA' '2016- 11-16T08: 24: 42 Запуск в Windows PowerShell ISE Host как MYDOMAIN \ myuser' '2016-11-16T08: 24: 42 Текущее состояние квартиры STA' – philcart

Смежные вопросы