我在PowerShell中完成了一个脚本,这就是我必须做的事情:
下面的代码是我已经拥有的,但它可能是错的,因为我还没有给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!"
}
}
答案 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!"
}
}
缺少一个显而易见的事情是你没有显示哪个文件触发了该消息。您应该更新通知/输出过程。您也没有验证文件内容的逻辑。对于具有非数字内容的文件,可能很容易在程序上或程序上失败。