Dri*_*Rey 3 powershell user-interface batch-file
我目前通过.bat文件打开我的PowerShell脚本.该脚本具有GUI.我试着将它放在我的脚本中,但它也隐藏了GUI并且还保持循环,因为我希望我的GUI不断循环:
powershell.exe -WindowStyle Hidden -file c:\script.ps1
Run Code Online (Sandbox Code Playgroud)
我们如何在没有Command Promp的情况下运行脚本,但也没有隐藏gui?如果我们使用.bat文件运行脚本,那是相同的吗?谢谢!
Blu*_*kes 14
如果你想在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)
}
Run Code Online (Sandbox Code Playgroud)
将上述功能添加到表单后,只需Hide-Console在您的Form_Load活动中调用该功能:
$OnFormLoad =
{
Hide-Console
}
Run Code Online (Sandbox Code Playgroud)
如果您需要显示控制台,也许是为了进行调试,您可以通过调用该Show-Console函数轻松地再次显示控制台:
$OnButtonClick =
{
Show-Console
}
Run Code Online (Sandbox Code Playgroud)
有关您可以传递给的数字的更多信息,可以在此处查看MSDN上ShowWindow的ShowWindow文档
根据评论更新
谢谢你的代码.我尝试在我的脚本中使用它,但我想在哪里放置Hide-Console?我的表单加载看起来像$ objForm.Add_Shown({$ objForm.Activate()})[void] $ objForm.ShowDialog()
要使用此代码隐藏控制台,您只需要调用Hide-Console.由于你已经在Shownevent($objForm.Add_Shown)中有代码,我们可以简单地添加另一行来调用命令:
改变这个:
$objForm.Add_Shown({$objForm.Activate()})
Run Code Online (Sandbox Code Playgroud)
对此:
$objForm.Add_Shown({
$objForm.Activate()
Hide-Console
})
Run Code Online (Sandbox Code Playgroud)
当您的表单Shown被隐藏时,控制台将被隐藏(Show-Console如果您想稍后再看,您仍然可以调用).
如果您从窗口设置为最小化的快捷方式运行 PowerShell,它会在任务栏中短暂闪烁一个 cmd 图标,但您几乎不会注意到它。然而,它将启动您的 PowerShell GUI,而后面没有控制台窗口。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle Hidden -file "C:\path\whatever.ps1"
Run Code Online (Sandbox Code Playgroud)
如果你想从whatever.ps1启动第二个GUI控制台窗口而不停止对whatever.ps1的处理,你需要使用start-process。但是,隐藏 -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
Run Code Online (Sandbox Code Playgroud)
作为奖励,如果您使用 param() 语句启动whatever2.ps1,则可以传递命名的必需参数。只要确保它是 ps1 文件中的第一件事,甚至在程序集之前。
param (
[Parameter(Mandatory=$true)]
[string]$var1
)
$argumentlist = "/c powershell.exe -file `"C:\path\whatever2.ps1`" -param1 `"param1string`""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22615 次 |
| 最近记录: |