Как загрузить функцию в новой консоли Powershell.exe - PullRequest
4 голосов
/ 23 февраля 2010

У меня есть функция (function1), которая требует режима sta. Я хотел бы вызвать эту функцию из pos-консоли не в режиме sta. Это работает, когда у меня есть function1 в моем профиле

$command = "function1 'MyArguments'"
powershell -sta -command $command

Но как я могу это сделать, если у меня функция1 не в профиле и я звоню

powershell -sta -noprofile -command $command

Могу ли я выполнить несколько команд с вызовом powershell.exe? Или я могу передать customprofilepath?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2010

Вы можете разделить несколько команд точкой с запятой (;), например, поставить точку в сценарии, содержащем вашу функцию, а затем вызвать функцию:

powershell -sta -noprofile -command ". c:\functions.ps1 ; function1 'MyArguments'"
1 голос
/ 23 февраля 2010

Если вы используете Расширения сообщества PowerShell , вы можете использовать Invoke-Apartment, например ::100100

PS> Invoke-Apartment -Apartment STA `
                     -Expr {[Threading.Thread]::CurrentThread.ApartmentState}
STA
1 голос
/ 23 февраля 2010

Есть несколько способов справиться с STA:

В случае, если вы вызовете powershell.exe (поскольку это, очевидно, проще), вы можете сначала загрузить скрипт с помощью функции, а затем выполнить function1 'My arguments'

powershell -sta -noprofile -command '<pathToYourScript>.ps1; function1 args'

Я пытался использовать параметр -file и аргумент -command вместе, но это не сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...