2017-08-15 16 views
1

からの私は、次のPowerShellコマンドを実行]ダイアログから実行された場合にのみDLLのインポートエラーを経験しているように見えます。開いているPowerShellウィンドウからの全く同じコマンドが問題なく実行されます。 RUN]ダイアログコマンドを生成エラー:インポートDLLファイル名を指定して実行]ダイアログ

エラー:

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; 

私はこの両方の方法で印象に残っているので、これは混乱を超えている同じ成果を生み出しました。これが起こっている理由についての論理的な推論はありますか?このエラーはどのように解決できますか?

コードの目的は、PowerShellウィンドウを最小化することです。私はこれを達成する他の方法があることを認識しています。

答えて

1

は、異なる言語間の入れ子文字列リテラルの素晴らしい世界へようこそ。

のPowerShellで実行したいコマンドライン全体を二重引用符を入れて、バックスラッシュとネストされた二重引用符エスケープ:

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

補遺: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

関連する問題