我在加載自定義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。 –