自定义PowerShell命令行开关不导入

时间:2013-06-26 19:29:25

标签: .net powershell

我在我们的某个环境中加载自定义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'

加载模块

显然没有导入我的'Read-Version'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。

6)我试图通过显式启动PowerShell进程作为管理员来加载程序集,包括x64和x86变体。

7)从我的工作环境复制整个C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0(甚至是C:\ Windows \ System32 \ WindowsPowerShell \ v1.0)并启动powershell.exe的实例没有改变行为。

希望到目前为止清楚地说明了这种情况。总而言之,这种失败只是一种环境,而对于我的生活,我无法弄清楚它与当地环境有何不同。显然有什么东西,但是什么? PowerShell完全缺乏额外的信息(即使使用'Verbose')也非常令人沮丧。为了重申我的问题的开头,我确实做了很多搜索(在这里和其他地方) - 步骤(5)中的CAS解决方案甚至来自StackOverflow帖子。所以如果我错过了什么,我会提前道歉。

1 个答案:

答案 0 :(得分:2)

您的目标是.NET 4.x,但默认情况下PowerShell v2在.NET 2.0(最多3.5)上运行。也许app配置技巧不像宣传的那样工作?虽然这对您的系统来说是一件好事,但我会犹豫是否将Powershell.exe的应用程序配置文件添加到其他人的计算机上。如果你想要扩展,为什么不编译.NET 2.0?如果您需要.NET 4.0,则要求用户至少拥有PowerShell v3。