【发布时间】:2020-10-07 13:48:58
【问题描述】:
我想停止用户使用 PowerShell 在 Windows 中运行已经运行的程序/服务的另一个实例。
例如:我打开了记事本,然后在几分钟内我想禁用打开记事本的选项,因为它已经在运行。
到目前为止,我可以检测程序是否打开,如果没有,我可能会为用户打开它(附代码)。
$processName = Get-Process notepad -ErrorAction SilentlyContinue
if ( $processName ) {
Write-Host 'Process is already running!'
#stop another instance of notepad to be opened, since it is already running
}
else {
$userChoice = Read-Host 'Process is not running, should I start it? (Y/N) '
if ($userChoice -eq 'Y') {
Start-Process notepad
}
else {
Write-Host 'No Problem!'
}
}
但是,如何禁用用户打开另一个相同实例的选项?
任何相同的线索都会有所帮助。
【问题讨论】:
-
你不能。 Windows 中没有这样的策略,甚至 AppLocker 中也没有。这可以通过应用程序代码来完成——如果你有源代码——通过添加一个互斥体并检查它是否被获取。如果是则退出程序,否则继续。
-
@vonPryz 感谢您的回复。在那种情况下,我可以以某种方式冻结系统在相同的时间内打开另一个程序吗? (就像系统挂了一样)
-
如果您没有应用程序的源代码,您可以编写一个小程序作为实际应用程序的启动器。然后启动器包含互斥检查。但这可以通过运行实际程序很容易地规避。你的practical use case 到底是什么?
-
@vonPryz 你能详细说明一下吗?我是 PowerShell 脚本的新手。
-
我将总结一个关于在 Powershell 中使用包装器的示例。同时,edit 问题并解释了有关用例的更多详细信息。我很确定可能会有更好的解决方案,但这取决于你really are after。
标签: windows powershell powershell-7.0 powershell-6.0