我在加载自定义PowerShell命令行程序时遇到了问题。现在,我知道在我的本地环境中,我可以同时加载和执行commandlet。我一直在寻找几个小时,并且什么都没有找到 - 所以我很抱歉如果这个答案在那里,但我还没有找到答案。情况:未自定义PowerShell命令行导入
1)我写了一个.NET中的PowerShell命令行开关,从System.Management.Automation.Cmdlet类派生。我最初的目标是.NET 4.5,但现在已经针对.NET 4.0。我将继续描述的每件事都是在两个目标下进行的。 2)运行命令“Import-Module -Verbose -Name C:\ path \ to \ commandlet.dll”在本地产生以下输出(它工作的地方): VERBOSE:从路径'C: .... \ myDLL.dll' VERBOSE:导入cmdlet'读取版本' 与'错误'环境中的输出: VERBOSE:从路径'C:.... \ myDLL.dll'加载模块'
这显然不是导入我的'读版'cmdlet。
3)我已经添加了 'powershell.exe.config' 和 'powershell_ise.exe.config' 文件,其内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- http://msdn.microsoft.com/en-us/library/w4atty68.aspx -->
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319" />
<supportedRuntime version="v3.5" />
<supportedRuntime version="v3.0" />
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
到以下目录: C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 和 C:\ WINDOWS \ Syswow64资料\ WindowsPowerShell \ V1.0
4)我知道下面的安全隐患,但通过继续和禁用的强命名程序集的验证以下PowerShell功能:
Function DisableStrongSignValidation
{
reg DELETE "HKLM\Software\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Microsoft\StrongName\Verification\*,*" /f
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64")
{
reg DELETE "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,*" /f
}
Restart-Service msiserver
}
我验证了注册表项是创建的。
5)我已经通过验证他的依赖关系中的'myDLL.dll'和具有FullTrust来验证Code Access Security不是问题。
6)我试图通过以管理员身份显式启动PowerShell进程加载程序集,包括x64和x86两种版本。
7)从我的工作环境中拷贝整个C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0(甚至是C:\ Windows \ System32 \ WindowsPowerShell \ v1.0)并启动该powershell实例。 exe导致行为没有变化。
希望能够清楚地说明目前的情况。回顾一下,这种失败只是一种环境,对我而言,我无法弄清楚它与我的本地环境有何不同。显然有些东西,但是什么? PowerShell完全缺乏额外的信息(即使使用'Verbose')也很令人沮丧。为了重申我的问题,我做了很多搜索(包括这里和其他地方) - 步骤(5)中的CAS解决方案甚至来自StackOverflow帖子。所以如果我错过了一些东西,我会提前道歉。
在您遇到问题的计算机上安装了PowerShell 3.0或2.0(请参阅$ PSVersionTable)? –
@KeithHill欣赏快速反应。它似乎安装了2.0: PSVersion - 2.0 PSCompatibleVersions - (1.0,2.0) [...其他一些...] CLRVersion - 4.0.30319.17929 – user2525514
您的目标是.NET 4.x,但运行PowerShell v2 .NET 2.0(最高3.5)。也许应用程序配置技巧是不工作的广告?虽然在你的系统上这是一件好事,但我会犹豫是否要为Powershell.exe添加一个应用程序配置给别人的机器。如果你想达成目标,为什么不直接针对.NET 2.0进行编译?或者要求用户至少拥有PowerShell v3。 –