2016-11-15 127 views
1

我目前通過.bat文件打開PowerShell腳本。該腳本有一個GUI。我試圖把這個在我的劇本,但它躲到了GUI以及還不停地循環,因爲我想我的GUI,不斷循環:打開PowerShell腳本並隱藏命令提示符,但不是GUI

powershell.exe -WindowStyle Hidden -file c:\script.ps1 

我們如何運行沒有命令Promp一個劇本,但也不能掩蓋GUI?如果我們使用.bat文件運行腳本,情況是否如此?謝謝!

+2

將其放入快捷方式而不是批處理文件中。右鍵單擊桌面上或文件夾窗口中的空白處,單擊新建,快捷方式,粘貼您的行,然後命名它,完成。 – 2016-11-15 19:47:33

+0

謝謝麪條,這工作!我做了這個'%SystemRoot%\ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -file「\\ location \ folder1 \ script.ps1」' – DrixlRey

回答

6

如果你想隱藏的GUI我已經與下面的本地函數成功背後的控制檯:一旦上述功能已經被添加到您的表格

# .Net methods for hiding/showing the console in the background 
Add-Type -Name Window -Namespace Console -MemberDefinition ' 
[DllImport("Kernel32.dll")] 
public static extern IntPtr GetConsoleWindow(); 

[DllImport("user32.dll")] 
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow); 
' 

function Show-Console 
{ 
    $consolePtr = [Console.Window]::GetConsoleWindow() 

    # Hide = 0, 
    # ShowNormal = 1, 
    # ShowMinimized = 2, 
    # ShowMaximized = 3, 
    # Maximize = 3, 
    # ShowNormalNoActivate = 4, 
    # Show = 5, 
    # Minimize = 6, 
    # ShowMinNoActivate = 7, 
    # ShowNoActivate = 8, 
    # Restore = 9, 
    # ShowDefault = 10, 
    # ForceMinimized = 11 

    [Console.Window]::ShowWindow($consolePtr, 4) 
} 

function Hide-Console 
{ 
    $consolePtr = [Console.Window]::GetConsoleWindow() 
    #0 hide 
    [Console.Window]::ShowWindow($consolePtr, 0) 
} 

,只需調用Hide-Console功能在你的事件:

$OnFormLoad = 
{ 
    Hide-Console 
} 

如果你需要顯示控制檯,也許調試,您可以輕鬆地再次通過調用函數Show-Console顯示控制檯:

$OnButtonClick = 
{ 
    Show-Console 
} 

有關編號的詳細信息可以傳遞給ShowWindow您可以根據評論檢查出ShowWindow documentation on MSDN here

更新

感謝這個代碼。我試圖在我的腳本中使用它,但我想在哪裏放置Hide-Console?我的窗體加載看起來像這樣$ objForm.Add_Shown({$ objForm.Activate()})[空] $ objForm.ShowDialog()

要隱藏與此代碼的控制檯,所有你需要做的就是調用Hide-Console。既然你已經在Shown事件($objForm.Add_Shown)的代碼,我們可以簡單地添加另一行調用命令:

更改此:

$objForm.Add_Shown({$objForm.Activate()}) 

要這樣:

$objForm.Add_Shown({ 
    $objForm.Activate() 
    Hide-Console 
}) 

當你的表格是Shown控制檯將被隱藏(如果您想稍後再看,您仍然可以撥打Show-Console)。

+0

感謝這段代碼。我試圖在我的腳本中使用它,但我想在哪裏放置Hide-Console?我的表單加載看起來像這樣'$ objForm.Add_Shown({$ objForm.Activate()}) [void] $ objForm.ShowDialog()' – DrixlRey

+0

我已經更新了我的答案以包含如何調用' 「Shown」事件塊中的Hide-Console命令。如果這個答案對你有幫助,請點擊打勾來接受答案,以幫助他人找到相同的答案。 – Bluecakes

0

如果您從窗口設置爲最小化的快捷方式運行PowerShell,它會短暫閃爍任務欄中的cmd圖標,但您幾乎不會注意到它。但是,它將在沒有控制檯窗口的情況下啓動PowerShell GUI。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle Hidden -file "C:\path\whatever.ps1" 

如果你要開始whatever.ps1第二GUI控制檯窗口沒有它停止在whatever.ps1你需要使用的啓動過程的處理。但是,隱藏-WindowStyle的啓動過程會阻止GUI顯示。刪除-WindowStyle在GUI後面顯示一個命令窗口。但是,如果您使用cmd.exe/k開始處理,它確實可行。

$argumentlist = "/c powershell.exe -file `"c:\path\whatever2.ps1`" -param1 `"paramstring`"" 
Start-Process cmd.exe -WindowStyle Hidden -ArgumentList $argumentlist 

作爲獎勵,如果你開始whatever2。ps1和param()語句,您可以傳遞命名的必需參數。確保它是ps1文件中的第一件事,甚至在組件之前。

param (
    [Parameter(Mandatory=$true)] 
    [string]$var1 
) 
$argumentlist = "/c powershell.exe -file `"C:\path\whatever2.ps1`" -param1 `"param1string`"" 
相關問題