Las*_*Cat 3 powershell powershell-2.0
以下是我正在使用的代码:
$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
}
}
Run Code Online (Sandbox Code Playgroud)
代码检查company_name_uat-Historian进程是否在服务器上运行,如果它正在运行,它将输出runn1ng,fai1ed如果没有.
问题是,它只在检查一个进程时就像上面的代码一样,但是当你尝试检查进程列表时却没有.
我需要检查一个进程列表,所以当我链接其余的时,如下所示:
$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
}
Run Code Online (Sandbox Code Playgroud)
他们都输出fai1ed.
如果我一个接一个地做,每个不同的过程都将返回runn1ng,只是所有人聚在一起他们返回fai1ed.
附注(如果有人想知道):
runn1ng并且fai1ed是使用JavaScript替换为图像的"代码字".我正在制作一个监视我的Windows服务器工作的HTML仪表板,所以请考虑绿色复选标记和红色x标记以及不是.spotify被列为一个过程,因为我知道它是一个合法的过程,但没有安装在我们的服务器上.当我编写脚本时,我最初在自己的个人计算机上进行了测试,并用作spotify测试runn1ng我是否打开它或fai1ed是否关闭它的方法.如果我的所有进程都是runn1ng并且spotify是fai1ed,则表明PS代码正在工作.它似乎发生在PowerShell版本2中.
是什么原因导致它以及如何重写它?
if (($FoundProcesses | Select-Object -ExpandProperty Name) -contains $Item) {
Run Code Online (Sandbox Code Playgroud)
PowerShell 3添加了一个名为member enumeration的东西.如果在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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |