如何在Powershell中设置Win32_ProcessStartup参数?

问题描述 投票:0回答:2

这是我迄今为止拥有的 PS 片段。启动分离的进程工作正常,但我无法设置 ProcessStartupInformation。如何才能做到这一点?此外,此代码有时会在新的 PS 实例中出现错误代码 8 或 21。到目前为止我还找不到这个错误的模式。但当我连续多次运行此代码而不关闭之前创建的记事本进程时,就会发生这种情况。

$startup = Get-WmiObject Win32_ProcessStartup 
$arguments = @{
    CommandLine = 'notepad.exe' # or just 'notepad'?
    CurrentDirectory = 'c:\windows\system32'
    # ProcessStartupInformation = $startup
}
Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments $arguments

出于任何原因,命令“Get-CimInstance -ClassName Win32_ProcessStartup”在最新的 Windows 11 中不会返回任何内容。

MSDN 有这个 VB 示例代码,但我不知道如何将其转换为 Powershell:

Const HIDDEN_WINDOW = 12
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("Notepad.exe", null, objConfig, intProcessID)

或者我应该更好地使用任何其他(更可靠)选项来启动独立的进程?

更新: 这是我现在使用的代码,但多次运行时仍然收到恼人的错误代码 8 和 21:

# sample code starting a detached notepad-process 

# referennce: 
# https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-processstartup#properties
# https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow

$startup = [ciminstance]::new((Get-CimClass 'Win32_ProcessStartup'))
$startup.ShowWindow = 5        # hidden=0, normal=5, minimize=7, hidden=12
$startup.PriorityClass = 16384 # below normal

$arguments = @{
    CommandLine = 'notepad.exe'
    CurrentDirectory = 'c:\windows\system32'
    ProcessStartupInformation = $startup
}
Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments $arguments
powershell win32-process
2个回答
2
投票

创建一个

[ciminstance]
对象并将类作为第一个参数传递:

# create and configure startup object
$processStartup = [ciminstance]::new((Get-CimClass 'Win32_ProcessStartup'))
$processStartup.ShowWindow = 12

# attach to argument table
$arguments['ProcessStartupInformation'] = $processStartup 

0
投票

这个网站你可以假装在学校的时候入侵,它太有趣了 yippee

© www.soinside.com 2019 - 2024. All rights reserved.