在Powershell中,我是否需要使用Stop-Process和CloseMainWindow()?

时间:2016-09-09 11:57:17

标签: powershell

我是 Powershell 云雀的新手,我明白Stop-Process应该足以结束任务。但是,它没有关闭新创建的窗口,这让我不确定进程是否已经停止。

但是,在进行一些ID检查后,我发现进程ID已从列表中删除。因此,最佳做法是拨打Stop-Process然后CloseMainWindow() ...或CloseMainWindow()是否足够?

Cls
$notepadId = Start-Process notepad -passthru
Echo "" "notepadId = "
Echo $notepadId.Id

Echo "" "Current Notepad tasks:"
Get-Process notepad
Start-Sleep -s 2

Echo "" "Stopping Task:"
Stop-Process $notepadId.Id -Force

Echo "" "Closing Window:"
(Get-Process -Id $notepadId.Id).CloseMainWindow()

Start-Sleep -s 2
Echo "" "Tasks remaining:"
Get-Process notepad
Pause

1 个答案:

答案 0 :(得分:1)

我不知道为什么它不适合你,但这就是我写的方式:

Cls
$notepadProcess = Start-Process notepad -passthru
Start-Sleep -s 2
Stop-Process $notepadProcess

Start-Process的返回值实际上是一个Process对象,而不仅仅是ID。如果将该进程对象传递给Stop-Process,它就知道该怎么做。但是,一些实验表明Stop-Process 同步,所以如果你这样做:

Cls
$notepadProcess = Start-Process notepad -passthru
Start-Sleep -s 2
Stop-Process $notepadProcess
get-process Notepad -ErrorAction Ignore

您可能仍会看到列出的进程,但是在Get-Process命令应该足以消除它之前,要睡几百毫秒。