PowerShell隱藏不顯示窗口的多種方法
啟動(dòng)PowerShell時(shí)隱藏自己的窗口
假如我在計(jì)劃任務(wù)中定時(shí)通過(guò)Powershell.exe來(lái)執(zhí)行一個(gè)腳本文件,我想隱藏這個(gè)窗口,此時(shí)我們可以考慮使用PowerShell.exe的選項(xiàng)參數(shù):
-WindowStyle
將窗口樣式設(shè)置為 Normal、Minimized、Maximized 或 Hidden。
PowerShell.exe -WindowStyle Hidden -file '您的腳本.ps1'
在PowerShell啟動(dòng)其它進(jìn)程時(shí)隱藏窗口
這個(gè)需求也能理解:
Start-Process notepad.exe -WindowStyle Hidden
上面的腳本會(huì)啟動(dòng)一個(gè)隱藏的記事本程序。
使用PowerShell隱藏其它進(jìn)程的窗口
這是一個(gè)奇葩的需求,但是用戶也有一番自己的理由:
@scl95tx如是說(shuō):
我已經(jīng)實(shí)現(xiàn)了一個(gè)24小時(shí)不間斷的Powershell腳本,有很多數(shù)據(jù)通過(guò)write-host命令輸出到控制臺(tái)(需要隨時(shí)查看這些數(shù)據(jù),確保server運(yùn)行正常,所以后臺(tái)運(yùn)行我先不考慮),如果(由于操作失誤)誤點(diǎn)擊控制臺(tái)窗口,那么腳本就會(huì)停止執(zhí)行,是否有辦法把控制臺(tái)隱藏起來(lái),如果我想查看腳本的運(yùn)行情況,再把控制臺(tái)調(diào)出來(lái):也就是有隨時(shí)隱藏和調(diào)出來(lái)控制臺(tái)的辦法嗎?
這需求合情合理啊,接下來(lái)我們解決這個(gè)問(wèn)題:
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)
}
寫(xiě)完上面的腳本后,我滿心喜悅地進(jìn)行測(cè)試,隱藏窗口成功:
Get-Process notepad | Set-ProcessWindowStyle -WindowStyle Hidden
可是當(dāng)我嘗試調(diào)出隱藏的窗口時(shí),執(zhí)行返回false。
PS> Get-Process notepad | Set-ProcessWindowStyle -WindowStyle Show
False
對(duì)此我深表遺憾,當(dāng)窗口被隱藏后,進(jìn)程的句柄值MainWindowHandle變成了0,0代表什么?
MSDN如是說(shuō):如果關(guān)聯(lián)進(jìn)程沒(méi)有主窗口,則 MainWindowHandle 值為零。
結(jié)論:不要隱藏進(jìn)程的窗口,否則你將永遠(yuǎn)失去了操作該窗口的機(jī)會(huì)。
相關(guān)文章
PowerShell中的強(qiáng)類型數(shù)組介紹
這篇文章主要介紹了PowerShell中的強(qiáng)類型數(shù)組介紹,強(qiáng)類型數(shù)組可以理解為強(qiáng)制數(shù)據(jù)類型的數(shù)組,也就是一個(gè)數(shù)組里只包含一種數(shù)據(jù)類型,需要的朋友可以參考下2014-08-08PowerShell腳本實(shí)現(xiàn)網(wǎng)卡DHCP自動(dòng)獲取IP地址、設(shè)置靜態(tài)IP地址的方法
這篇文章主要介紹了PowerShell腳本實(shí)現(xiàn)網(wǎng)卡DHCP自動(dòng)獲取IP地址、設(shè)置靜態(tài)IP地址的方法,本文同時(shí)講解了用PowerShell設(shè)置網(wǎng)卡DHCP、靜態(tài)IP的方法,需要的朋友可以參考下2014-08-08PowerShell默認(rèn)參數(shù)$PSDefaultParameterValues結(jié)合Out-File輸出到日志文件
這篇文章主要介紹了PowerShell默認(rèn)參數(shù)$PSDefaultParameterValues結(jié)合Out-File輸出到日志文件實(shí)例,需要的朋友可以參考下2014-06-06PowerShell中把IP轉(zhuǎn)換為長(zhǎng)整形數(shù)字的方法
這篇文章主要介紹了PowerShell中把IP轉(zhuǎn)換為長(zhǎng)整形數(shù)字的方法,本文通過(guò)自定義兩個(gè)過(guò)濾器實(shí)現(xiàn),需要的朋友可以參考下2014-08-08Powershell創(chuàng)建數(shù)組正確、更快的方法
這篇文章主要介紹了Powershell創(chuàng)建數(shù)組正確、更快的方法,Powershell使用ArrayList創(chuàng)建數(shù)組的例子,需要的朋友可以參考下2014-07-07PowerShell Out-File追加字符串到文件末尾的方法
這篇文章主要介紹了PowerShell Out-File追加字符串到文件末尾的方法,只要加一個(gè)-Append參數(shù)即可實(shí)現(xiàn)追加內(nèi)容需求,需要的朋友可以參考下2014-08-08PowerShell重啟服務(wù)命令Restart-Service詳細(xì)介紹
這篇文章主要介紹了PowerShell重啟服務(wù)命令Restart-Service詳細(xì)介紹,Restart-Service命令主要用來(lái)重啟一些系統(tǒng)級(jí)的服務(wù),需要的朋友可以參考下2014-08-08Powershell實(shí)現(xiàn)編寫(xiě)和運(yùn)行腳本
本文為那些對(duì)學(xué)習(xí) Windows PowerShell 命令行和腳本編寫(xiě)環(huán)境感興趣的系統(tǒng)管理員提供了資源。也請(qǐng)告訴我們本網(wǎng)站如何才能對(duì)您更有用處。2015-09-09