2016-11-15 21 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`"" 
相关问题