Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell从CSV中删除行_Powershell - Fatal编程技术网

PowerShell从CSV中删除行

PowerShell从CSV中删除行,powershell,Powershell,我在内部运行一个脚本,以获取组织LAN段上的SystemName及其模型。下面是示例CSV文件 "SystemName","Model" "DELL-10110","DELL Optiplex" "DELL-10111","DELL Optiplex" "Lenovo-30119","Lenovo ThinkCentre" "D

我在内部运行一个脚本,以获取组织LAN段上的SystemName及其模型。下面是示例CSV文件

"SystemName","Model"
"DELL-10110","DELL Optiplex"
"DELL-10111","DELL Optiplex"
"Lenovo-30119","Lenovo ThinkCentre"
"DELL-10112","DELL Optiplex"
"HP-21011","HP Prodesk"
"HP-21012","HP Prodesk"
我运行另一个Powershell脚本来导入CSV文件,如果SystemName包含HP,则删除整行。但输出的CSV文件仍具有HP系统

$DATA = Import-CSv C:\IT\Inventory.csv | ForEach-Object {
    [PSCustomObject]@{
        SystemName = $_.SystemName
        Model = $_.Model
    }
}
$DATA | Where-Object {$_.SystemName -ne "*HP*"} | Export-Csv -NoTypeInformation -Path C:\IT\Inventory-New.csv

正如@Theo所提到的,问题肯定出在比较运算符
-ne
中@西奥的评论是一个可以接受的解决方案,但我要指出这里有很多不必要的东西
Import Csv
已经输出PSCustomObjects,没有理由在
ForEach对象
循环中创建新对象。一旦意识到这一点,您就可以将其压缩为单个管道,如:

    Import-CSv 'C:\IT\Inventory.csv' | 
    Where-Object{ $_.SystemName -notmatch '^HP' } |
    Export-Csv -NoTypeInformation -Path 'C:\IT\Inventory-New.csv'
注意:即使您需要的对象只有原始属性的一个子集,我也会在创建新对象之前使用
选择对象
<代码>选择对象还输出PSCustomObjects


在上面的示例中,我使用了
-notmatch
和正则表达式锚
^
。Where子句实际上意味着Where不以“HP”开头。然而,这只是为了演示<代码>-不象“*HP*”或
“HP*”
可能同样有效,这取决于您的数据。

使用
-不象“*HP*”
,而不是
-ne