下面是我使用的代码:
$ProcessesToCheckFor = (
'company_name_uat-Historian'
)
$FoundProcesses = Get-Process -Name $ProcessesToCheckFor -ErrorAction SilentlyContinue
foreach ($Item in $ProcessesToCheckFor)
{
if ($FoundProcesses.Name -contains $Item)
{
'{0} runn1ng' -f $Item
}
else
{
'{0} fai1ed' -f $Item
}
}
代码检查company_name_uat-Historian
进程是否正在服务器上运行,如果正在运行,它将输出runn1ng
和fail1ed
如果没有。
问题是,就像上面的代码一样,它只检查一个进程时有效,但当您尝试检查进程列表时则无效。
我需要检查进程列表,所以当我按如下所示链接其余进程时:
$ProcessesToCheckFor = (
'company_name_uat-Historian',
'company_name_uat-KEReviewCollector',
'company_name_uat-lwm',
'company_name_uat-MQAck',
'company_name_uat-MQOutput',
'company_name_uat-SQAC',
'company_name_uat-Store',
'company_name_uat-Store_STS',
'company_name_uat-StoreLegacy',
'spotify'
)
$FoundProcesses = Get-Process -Name $ProcessesToCheckFor -ErrorAction SilentlyContinue
foreach ($Item in $ProcessesToCheckFor)
{
if ($FoundProcesses.Name -contains $Item)
{
'{0} runn1ng' -f $Item
}
else
{
'{0} fai1ed' -f $Item
}
它们都输出fail1ed
。
如果我一个一个地执行它们,每个不同的进程将返回 runn1ng
,只是全部聚集在一起它们返回 fail1ed
。
旁注(如果有人想知道的话):
runn1ng
和fai1ed
是使用 JavaScript 被图像替换的“代码字”。我正在制作一个 HTML 仪表板来监控我的 Windows 服务器的工作情况,所以想想绿色复选标记和红色 x 标记等等。- 使用 PowerShell 版本 2 根本不是我的选择,我负责监控的一些服务器是 Windows 2008 R2。我相信它们会在今年某个时候更新,但项目可交付成果要求我立即制定监控解决方案。还有一些 2012 年的服务器,我喜欢为其编写 PowerShell 脚本。
spotify
被列为一个进程,因为我知道它是一个合法的进程,但没有安装在我们的服务器上。当我编写脚本时,我最初在自己的个人计算机上进行了测试,并使用spotify
作为测试runn1ng
是否打开或fail1ed
如果我关闭它。如果我的所有进程都在runn1ng
并且 spotify 是fail1ed
,那么这表明 PS 代码正在运行。
它似乎发生在 PowerShell 版本 2 中。
任何想法是什么导致它以及我如何重写它?
最佳答案
答案
if (($FoundProcesses | Select-Object -ExpandProperty Name) -contains $Item) {
为什么
PowerShell 3 添加了称为成员枚举的东西。如果在 2.0 中有对象数组,则不能直接调用数组的属性,因为它会在数组对象本身上查找那些属性。在 3.0+ 中,如果数组中不存在该成员,它也会检查该成员的项目。使用 Select-Object -ExpandProperty
是调用成员的更明确的方式。
您也可以将 Get-Process
调用移动到 foreach
循环中。
foreach ($Item in $ProcessesToCheckFor)
{
if (Get-Process -Name $Item -ErrorAction SilentlyContinue)
{
'{0} runn1ng' -f $Item
}
else
{
'{0} fai1ed' -f $Item
}
}
关于powershell - 在 PowerShell 版本 2 中检查进程和进程状态并根据单个进程或多个进程获得两个不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45314884/