我对PowerShell和编程的整体世界还很陌生,我已经开展了一个项目来帮助我学习。我正在尝试构建一个函数,将正在运行的进程列表与应该运行的列表进行比较。然后,该函数将返回“On”或“Off”的对象。以下是我目前编写的内容,但是现在我需要把它变成一个每隔几秒运行一次的工作。请问任何人都可以帮忙吗?非常感谢任何帮助。
function CheckRunningProcessesFunc
{
$Processes = (Get-Variable InclusionList).Value.CheckedItems #List of proceese to check if they are on or off
$RunningProcesses = Get-WMIObject Win32_Process -filter "Name='adc.exe' OR Name='optask.exe'" | select -expand path #current running processes
foreach ($Process in $Processes)
{
$TimeNow = get-date -Format ‘HH:mm:ss’
$Text = $TimeNow + " " + $Process
if ($RunningProcesses -contains $Process)
{
$Result = $Text + ' is On'
(Get-Variable ListBox).Value.Items.Add($Result)
}
else
{
$Result = $Text + ' is Off'
(Get-Variable ListBox).Value.Items.Add($Result)
}
}
}
答案 0 :(得分:1)
从您的评论中,您似乎正在使用PowerShell编写.NET GUI。这是一种非常罕见的方法,因为PowerShell本质上是一种脚本语言。要保持GUI响应能力,您必须始终避免阻止代码并依赖事件处理和回调函数等技术。这不是PowerShell构建要处理的东西。
由于PS是基于.NET框架构建的,因此没有什么可以阻止您实例化内置对象(如Stopwatch类),但要使其与PS交互以满足需要花费大量的工作。
我的建议是,如果你想使用WinForms,那么使用C#。然后,如果您想利用PowerShell的一些优势,您可以使用整个System.Management.Automation命名空间。