从随机命名的文本文件中读取

时间:2018-05-24 15:30:29

标签: powershell foreach

我在PowerShell中完成了一个脚本,这就是我必须做的事情:

  • 查找并检索文件夹中的所有.txt文件
  • 阅读他们的内容(里面有一个必须小于50的数字)
  • 如果这些文件中的任何一个具有大于50的数字,请更改一个标志,以便我将暴击消息发送到监控服务器。

下面的代码是我已经拥有的,但它可能是错的,因为我还没有给Get-Content任何论据,它可能是非常简单的,但是我还是习惯了PowerShell。有什么建议?非常感谢。

Get-ChildItem -Path C:\temp_erase\PID -Directory -Filter *.txt |            
ForEach-Object{
    $warning_counter = Get-Content
    if ($warning_counter -gt '50')
    {
        $crit_counter = 1
        Write-Host "CRITICAL: Failed to kill service more than 50 times!"
    }
}

1 个答案:

答案 0 :(得分:0)

  

但这可能是错的,因为我还没有给Get-Content带来任何争议

是。这是第一个问题。当你迷路时,请查看Get-Help <command>docs like TechNet。对于核心cmdlet,您将始终看到示例。

其次,Get-Content返回字符串数组(默认情况下),因此如果要进行数值比较,则需要将值视为此值。

第三,你在foreach-object cmdlet和它的左大括号之间有一个换行符。这将解决您的解析问题,PS将提示缺少进程块。所以改变那些提到的......

Get-ChildItem -Path C:\temp_erase\PID -Directory -Filter *.txt | ForEach-Object{
    [int]$warning_counter = Get-Content $_.FullName
    if ($warning_counter -gt '50')
    {
        $crit_counter = 1
        Write-Host "CRITICAL: Failed to kill service more than 50 times!"
    }
}

缺少一个显而易见的事情是你没有显示哪个文件触发了该消息。您应该更新通知/输出过程。您也没有验证文件内容的逻辑。对于具有非数字内容的文件,可能很容易在程序上或程序上失败。