2017-08-15 28 views
1

只有當從運行對話框執行以下PowerShell命令時,我纔會遇到DLL導入錯誤。從打開的PowerShell窗口完全相同的命令執行沒有問題。錯誤:從運行對話框導入DLL

錯誤產生RUN對話框命令:

Powershell $k=Add-Type -MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr h, int n);' -Name w -PassThru 

打印以下錯誤:在一個已打開的powershell窗口運行相同的代碼時,返回 powershell error

沒有錯誤:

$k=Add-Type -MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr h, int n);' -Name w 
-PassThru; 

我覺得這不會讓人困惑,因爲我在這兩種方法的印象下ld產生了相同的結果。有什麼邏輯推理爲什麼會發生這種情況?如何解決這個錯誤?

該代碼的目的是儘量減少PowerShell窗口。我知道還有其他方法可以實現這一點。

回答

1

歡迎來到不同語言嵌套字符串文字的美妙世界。

powershell "$k=Add-Type -MemberDefinition '[DllImport(\"user32.dll\")]pub...;" 
#  ^          ^  ^  ^

附錄:要通過PowerShell的執行和逃避嵌套雙引號反斜槓整個命令行圍繞

把雙引號注意,上述命令行會工作從PowerShell控制檯調用時。在這種情況下,你需要額外的(PowerShell中)逃脫的命令字符串內$"字符:

powershell "`$k=Add-Type -MemberDefinition '[DllImport(\`"user32.dll\`")]pub...;" 
#   ^          ^  ^
+1

的確。如果[PSv6 +將默認爲'-File'](https://github.com/PowerShell/PowerShell/pull/4019),也值得推薦明確使用'-Command'。 – mklement0

+0

完美答案,謝謝! – Msegling