Используйте import-module с PowerShell PSSnapin Dll

У нас есть устаревший PowerShell PsSnapin (c#). Я хочу избежать использования InstallUtil. Далее импортируется модуль с экспортированными командлетами PSSnapin:

import-module .\MySnapin.dll

Однако, когда я запускаю командлеты модуля, они терпят неудачу из-за невозможности найти ссылочные сборки (в частности, dll Enterprise Library).

Есть ли аккуратный способ заставить это работать?

(Доллар PsSnapin и все упомянутые сборки находятся в одном каталоге сборки, и когда я использую installutil, все зависимости разрешаются правильно)


person Rob    schedule 07.01.2016    source источник


Ответы (1)


Оснастки немного отличаются от модулей. Сначала необходимо зарегистрировать оснастку с помощью InstallUtil. .exe:

PS> $InstallUtil = Join-Path $([System.Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()) "InstallUtil.exe"
PS> & $InstallUtil "C:\Path\to\MySnapin.dll"

После регистрации сборки оснастки вы можете загрузить ее в сеанс powershell с помощью Add-PSSnapin:

PS> Add-PSSnapIn MySnapin
person Mathias R. Jessen    schedule 07.01.2016
comment
действительно - это то, что мы обычно делаем, но я явно пытался избежать InstallUtil. Например. поэтому я могу загрузить две версии одного и того же оснастки и т. д. - person Rob; 07.01.2016
comment
АА, вижу. Я не знаю, возможно ли это, но: переименовать одну версию, перекомпилировать, зарегистрировать обе, переключаться между ними с помощью Add/Remove-PSSnapIn, возможно? - person Mathias R. Jessen; 07.01.2016