在C#的System.Diagnostics.ProcessStartinfo类可以支持设置进程启动时隐藏窗口,今天再来分享一个使用WMI对象的的方法来隐藏启动程序的窗口。使用Win32_Process可以直接启动一个进程,但是缺少对这个进程的控制:比如让它隐藏自己的窗口。下面的的例子可以做到这一点:
function start-hiddenproc { [CmdletBinding()] param( [string]$processname = 'notepad.exe' ) $startclass = Get-CimClass -ClassName Win32_ProcessStartup $startinfo = New-CimInstance -CimClass $startclass -Property @{ShowWindow = 0} -ClientOnly $class = Get-CimClass -ClassName Win32_Process Invoke-CimMethod -CimClass $class -MethodName Create -Arguments @{ Commandline = $processname; ProcessStartupInformation = [CimInstance]$startinfo } }
该函数将要执行的进程的路径作为参数,这也方便你在脚本中加入验证路径是否存在的逻辑。
获取到Win32_ProcessStartup类,然后使用它创建一个启动信息实例。New-CimInstance的参数ClientOnly有一个别名: –Local。与参数的别名相比,我通常更喜欢使用参数的全名。这样更方便用户去查阅帮助文档。
获取到Win32_Process类,然后在Invoke-CimMethod中使用它的Create方法,将上面演示的的参数传递给它。
原文作者:Richard Siddaway
原文链接:Win32_Examples–start application in hidden window
本文链接: https://www.pstips.net/start-application-in-hidden-window.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
Powershell 2.0不行。
是的,如果是PowerShell2.0的化,同样的方法,使用WMIObject应当是可以的。
能给个2.0的例子吗?
其实PowerShell中的Start-Process命令本身就具备这个功能,PowerShell 2.0也是支持的。