Типы в модулях PowerShell 2 - PullRequest
       18

Типы в модулях PowerShell 2

4 голосов
/ 14 января 2011

Я реализовал небольшой модуль PowerShell, который содержит пользовательский тип. Я определил тип в файле .psm1 как класс C # и добавил его с помощью Add-Type. Теперь, когда я добавляю модуль и снова его удаляю, тип все еще там, который , вероятно, не совсем правильный (например, он предотвращает повторное добавление модуля). В документации для Remove-Module указано, что типы, определенные в сборках, загружаемых модулем, также выгружаются. Но мой модуль не вносит сборку, а просто в крошечный тип в форме исходного кода.

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

Есть ли что-то, что я могу подключить, чтобы удалить тип при выгрузке модуля? Или я должен просто игнорировать потенциальные ошибки с Add-Type, чтобы хотя бы иметь возможность повторно добавить модуль после удаления из сеанса? Я бы предпочел не помещать туда DLL (вероятно, в любом случае для этого крошечного модуля).

1 Ответ

6 голосов
/ 14 января 2011

В документах на Remove-Module также сказано, что сборка не выгружена. Это фундаментальная проблема с .NET и CLR. Как только сборка загружается в домен приложений, она не может быть выгружена. Таким образом, создание вашей собственной DLL (управляемой сборки) не поможет.

Я не уверен, что вы многое можете здесь сделать, если не будете избегать Add-Type и создавать свой собственный тип, используя new-object psobject -prop @{...} и $obj.psobject.typenames.insert(0, 'newtypename').

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