Это связано с Code Access Security в .NET. По умолчанию сборка , загруженная из сетевого ресурса, выполняется с ограниченными привилегиями, тогда как сборка * 1003 из локального хранилища вообще не имеет ограничений. К сожалению, командлет Import-Module
не указывает на то, что ему не удалось импортировать командлеты в модуле, даже если он вызывается с параметром -Verbose
.
Чтобы изменить набор разрешений, предоставленных определенному сетевому расположению, используйте утилиту caspol.exe
, чтобы создать новую группу кодов для этого местоположения:
caspol.exe -machine -addgroup 1.2 -url "file://server/share/directory/*" FullTrust
1.2
в приведенной выше команде относится к группе кодов LocalIntranet
, которая будет родительской для новой группы кодов. Следующая команда покажет, какие группы кодов определены, и может использоваться для отображения созданной вами группы:
caspol.exe -machine -listgroups
Обратите внимание, что в 32-битной Windows caspol.exe
находится в %WinDir%\Microsoft.NET\Framework\CLR_VERSION\
(где для PowerShell 2.0 CLR_VERSION равно v2.0.50727
), а в 64-битной Windows другая копия находится в %WinDir%\Microsoft.NET\Framework64\CLR_VERSION\
. Каждая из 32- и 64-разрядных версий имеет свой собственный файл конфигурации безопасности (CONFIG\security.config
), поэтому вам необходимо убедиться, что вы применяете каждое изменение безопасности к обеим версиям, используя соответствующие caspol.exe
.
Следующая команда может использоваться для отображения разрешений, которые будут предоставлены конкретной сборке:
caspol.exe -resolveperm "//server/share/directory/assembly.dll"