PowerShell隱藏Windows窗口

PowerShell隱藏Windows窗口 


啓動PowerShell時隱藏自己的窗口

假如我在計劃任務中定時通過Powershell.exe來執行一個腳本文件,我想隱藏這個窗口,此時我們可以考慮使用PowerShell.exe的選項參數:

-WindowStyle
 將窗口樣式設置爲 Normal、Minimized、Maximized 或 Hidden。
1
PowerShell.exe -WindowStyle Hidden  -file '您的腳本.ps1'

在PowerShell啓動其它進程時隱藏窗口

這個需求也能理解:

1
Start-Process notepad.exe -WindowStyle Hidden

上面的腳本會啓動一個隱藏的記事本程序。

使用PowerShell隱藏其它進程的窗口

這是一個奇葩的需求,但是用戶也有一番自己的理由:

@scl95tx如是說:

我已經實現了一個24小時不間斷的Powershell腳本,有很多數據通過write-host命令輸出到控制檯(需要隨時查看這些數據,確保server運行正常,所以後臺運行我先不考慮),如果(由於操作失誤)誤點擊控制檯窗口,那麼腳本就會停止執行,是否有辦法把控制檯隱藏起來,如果我想查看腳本的運行情況,再把控制檯調出來:也就是有隨時隱藏和調出來控制檯的辦法嗎?

這需求合情合理啊,接下來我們解決這個問題:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Add-Type @'
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
'@ -name “Win32ShowWindowAsync” -namespace Win32API
Function Set-ProcessWindowStyle
{
     param (
      [ Parameter (
      Mandatory = $true ,
      ValueFromPipeline = $true )]
     [System.Diagnostics.Process] $Process ,
     [ ValidateSet ( "Show" ,  "Minimized" , "Maximized" , "Hidden" )]
     [string] $WindowStyle = "Show"
     )
         $WinStateInt = 1
        switch ( $WindowState )
        {
         "Hidden"       { $WinStateInt =  0}
         "Show"     { $WinStateInt =  1}
         "Maximize"   { $WinStateInt =  3}
         "Minimize"   { $WinStateInt =  6}
         }
     [Win32API.Win32ShowWindowAsync] ::ShowWindowAsync( $Process .MainWindowHandle, $WindowState )
}

寫完上面的腳本後,我滿心喜悅地進行測試,隱藏窗口成功:

1
Get-Process notepad |  Set-ProcessWindowStyle -WindowStyle Hidden

可是當我嘗試調出隱藏的窗口時,執行返回false。

1
2
PS>  Get-Process notepad |  Set-ProcessWindowStyle -WindowStyle Show
False

對此我深表遺憾,當窗口被隱藏後,進程的句柄值MainWindowHandle變成了0,0代表什麼?

MSDN如是說:如果關聯進程沒有主窗口,則 MainWindowHandle 值爲零。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章