我在我们的某个环境中加载自定义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帖子。所以如果我错过了什么,我会提前道歉。
答案 0 :(得分:2)
您的目标是.NET 4.x,但默认情况下PowerShell v2在.NET 2.0(最多3.5)上运行。也许app配置技巧不像宣传的那样工作?虽然这对您的系统来说是一件好事,但我会犹豫是否将Powershell.exe的应用程序配置文件添加到其他人的计算机上。如果你想要扩展,为什么不编译.NET 2.0?如果您需要.NET 4.0,则要求用户至少拥有PowerShell v3。