2017-09-22 126 views
0

我有一個包含大量內容的批處理文件。我有一個警報窗口,提供給用戶的信息。如何在cmd /批處理中執行PowerShell Net MessageBox

在Windows Pro上,我使用Msg命令,它工作正常。

在Windows家庭沒有消息,所以我得到了主意,使用PowerShell代替:

[System.Windows.Forms.MessageBox]::Show("my text") 

它在PowerShell中工作正常。

-However,當我嘗試使用它在批處理或直接在cmd中執行它,我只得到文字:

C:\Windows\System32>powershell {[System.Windows.Forms.MessageBox]::Show("\""my text"\"")} 
    [System.Windows.Forms.MessageBox]::Show("my text") 

或者我得到的錯誤:

C:\Windows\System32>powershell -command [System.Windows.Forms.MessageBox]::Show("my text") 
At line:1 char:41 
+ [System.Windows.Forms.MessageBox]::Show(my text) 
+           ~ 
Missing ')' in method call. 
At line:1 char:41 
+ [System.Windows.Forms.MessageBox]::Show(my text) 
+           ~~ 
Unexpected token 'my' in expression or statement. 
At line:1 char:48 
+ [System.Windows.Forms.MessageBox]::Show(my text) 
+            ~ 
Unexpected token ')' in expression or statement. 
    + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall 

 C:\Windows\System32>powershell -command "& {[System.Windows.Forms.MessageBox]::Show('my text')}" 
Unable to find type [System.Windows.Forms.MessageBox]. 
At line:1 char:4 
+ & {[System.Windows.Forms.MessageBox]::Show('my text')} 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (System.Windows.Forms.MessageBox:TypeName) [], 
    RuntimeException 
    + FullyQualifiedErrorId : TypeNotFound 

我該怎麼做才能使它起作用?

(無需重寫整個腳本到PowerShell的,這是)

回答

0

你需要加載的類型,然後才能調用它。您可以這樣做:

powershell -command "[reflection.assembly]::LoadWithPartialName('System.Windows.Forms')|out-null;[windows.forms.messagebox]::Show('my message')" 
1

正如TheMadTechnician所述,您可能需要先加載它。

這實際上是相同的答案,他們僅在過去的幾行:各地my text

@Echo Off 
PowerShell -Command^ 
"[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')|Out-Null;"^ 
"[System.Windows.Forms.MessageBox]::Show(\"my text\")" 
Pause 

...和而雙引號是沒有必要的,我用它們向您展示了逃逸。