2013-06-26 126 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。