Powershell 从DSC或ChocolateInStall.ps1优雅地终止进程

Powershell 从DSC或ChocolateInStall.ps1优雅地终止进程,powershell,dsc,chocolatey,Powershell,Dsc,Chocolatey,您可以通过以下方式正常终止程序: Get-Process "*notepad*" | Foreach-Object {$_.CloseMainWindow()} 我正在使用带软件包的DSC配置或cChoco资源来安装软件包。我想警告用户程序正在更新(例如msg*“5分钟后关闭”),然后尝试优雅地关闭程序 我无法让它在巧克力包(chocolateyinstall.ps1)或所需的状态配置脚本中工作。我还尝试过将其作为任务计划脚本运行,但没有成功。我猜是因为进程运行在DSC/TaskSchedul

您可以通过以下方式正常终止程序:

Get-Process "*notepad*" | Foreach-Object {$_.CloseMainWindow()}
我正在使用带软件包的DSC配置或cChoco资源来安装软件包。我想警告用户程序正在更新(例如msg*“5分钟后关闭”),然后尝试优雅地关闭程序

我无法让它在巧克力包(chocolateyinstall.ps1)或所需的状态配置脚本中工作。我还尝试过将其作为任务计划脚本运行,但没有成功。我猜是因为进程运行在DSC/TaskScheduler运行的不同上下文中

我可以使用
Get process“*notepad*”| Stop process
终止进程,但这只会终止进程


我有什么办法可以做到这一点吗?我猜这与使用登录脚本对进程调用
CloseMainWindow()
是一样的。

CloseMainWindow使用GetWindowLong WINAPI,AFAIK需要特权才能读取其他进程内存。我不了解DSC,但您可以尝试通过封送的WINAPI函数手动打开正在运行的DSC进程:OpenProcess,然后是OpenProcessToken,LookupPrivilegeValue for SeDebugPrivilege,并在AdjustTokenPrivileges中使用它,但是假设
system
拥有尽可能高的权限,为什么不呢?我有点惊讶,你不能在巧克力包装中使用
msg*“message here”
。如果在DSC之外运行,它是否工作?