2013-06-26 85 views
0

我在加载自定义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帖子。所以如果我错过了一些东西,我会提前道歉。

+0

在您遇到问题的计算机上安装了PowerShell 3.0或2.0(请参阅$ PSVersionTable)? –

+0

@KeithHill欣赏快速反应。它似乎安装了2.0: PSVersion - 2.0 PSCompatibleVersions - (1.0,2.0) [...其他一些...] CLRVersion - 4.0.30319.17929 – user2525514

+0

您的目标是.NET 4.x,但运行PowerShell v2 .NET 2.0(最高3.5)。也许应用程序配置技巧是不工作的广告?虽然在你的系统上这是一件好事,但我会犹豫是否要为Powershell.exe添加一个应用程序配置给别人的机器。如果你想达成目标,为什么不直接针对.NET 2.0进行编译?或者要求用户至少拥有PowerShell v3。 –

回答

2

您的目标是.NET 4.x,但PowerShell v2默认运行于.NET 2.0(最高3.5)。也许应用程序配置技巧是不工作的广告?虽然这对你的系统来说是一件好事,但我会为Powershell.exe向其他人的机器添加应用配置文件而犹豫不决。如果你想达成目标,为什么不直接针对.NET 2.0进行编译?如果你需要.NET 4。0则需要用户至少拥有PowerShell v3。