我有一个如下所示的CSV文件:
Host;Service;OK;WARN;CRIT;UNKNOWN;Flapping;H.Down;Downtime;N/A Server1;DNS;0.00%;0.00%;100.00%;0.00%;0.00%;0.00%;0.00%;0.00% Server2;Filesystem C:/;0.00%;0.00%;100.00%;0.00%;0.00%;0.00%;0.00%;0.00% Server2;Filesystem D:/;28.82%;0.00%;70.68%;0.00%;0.00%;0.50%;0.00%;0.00% Server3;Events;0.00%;0.00%;98.97%;0.00%;0.00%;1.03%;0.00%;0.00% Server4;W32Time;0.00%;0.00%;100.00%;0.00%;0.00%;0.00%;0.00%;0.00%
我目前正在使用
导入它$computers = Import-Csv .\foo.csv -Delimiter ";"
我一直在尝试一些不同的事情来尝试清除百分号无效。
最终,我想将每个值作为数字,然后我可以格式化它们,以便任何高于0(或0.0%)的值都可以用颜色格式化。我认为CSV导入是以字符串形式导入所有内容,因此围绕字符串进行数学运算会更加困难,对于包含特殊字符的字符串更是如此。
答案 0 :(得分:3)
一个显而易见的事情是预处理您的数据文件以删除%
标志。例如:
(Get-Content .\data.csv).Replace("%","") |
Out-File .\data2.csv -Append
完成此操作后,可以通过将数字转换为数字类型来轻松使用数字,您需要为任何CSV执行数字类型(因为,正如您所说,PowerShell将所有内容视为字符串在这种情况下)。例如:
Import-Csv .\data2.csv -Delimiter ";" |
ForEach-Object {
switch([double]$_.CRIT)
{
{$_ -lt 75.0} {"CRIT is under 75: $_"}
default {"CRIT is over 75: $_"}
}
}
编辑:包含@LotPings建议的精简版:
(Get-Content .\data.csv).Replace("%","") |
ConvertFrom-Csv -Delimiter ";" |
ForEach-Object {
switch([double]$_.CRIT)
{
{$_ -lt 75.0} {"CRIT is under 75: $_"}
default {"CRIT is over 75: $_"}
}
}