Powershell csv删除行

Powershell csv删除行,powershell,csv,Powershell,Csv,我有一个CSV文件(file1),看起来像:(用户目录和大小) 我有另一个CSV文件(file2),看起来像:(VIP用户) 现在我要做的是更新file1,它看起来像: User1,10 User3,131 User2和User4被删除,因为它们位于file2 我可以删除它们,但同时删除所有用户的大小,因此我的输出仅为用户: User1 User3 我的代码: $SourcePath = "\\server1\info\SYSINFO\UsrSize" $Destin

我有一个CSV文件(
file1
),看起来像:(用户目录和大小)

我有另一个CSV文件(
file2
),看起来像:(VIP用户)

现在我要做的是更新
file1
,它看起来像:

User1,10    
User3,131
User2
User4
被删除,因为它们位于
file2

我可以删除它们,但同时删除所有用户的大小,因此我的输出仅为用户:

User1    
User3
我的代码:

$SourcePath = "\\server1\info\SYSINFO\UsrSize"    
$DestinationFile = "\\server1\info\SYSINFO\UsrSize\OverLimit\UsersOverLimit1.log"    
$VIP_Exclusion_List = "\\server1\info\SYSINFO\UsrSize\OverLimit\_VIP_EXCLUSION_LIST.txt"    
$Database = "\\server1\info\SYSINFO\UsrSize\OverLimit\_UsersOverLimitDATABASE.log"    
$INT_SizeToLookFor = 100    

dir $SourcePath -Filter usr*.txt | import-csv -delimiter "`t"  | 
Where-Object {[INT] $_."Size excl. Backup/Pst" -ge $INT_SizeToLookFor} |
Select-Object Initials,"Size excl. Backup/Pst" | convertto-csv -NoTypeInformation | % { $_ -replace '"', ""} | out-file  $DestinationFile   ;

$Userlist = import-csv $DestinationFile | Select-Object Initials | 
convertto-csv -NoTypeInformation | % { $_ -replace '"', ""};

compare-object ($Userlist) (get-content $VIP_Exclusion_List) |
select-object inputObject | convertto-csv -NoTypeInformation |
% { $_ -replace '"', ""} | out-file "\\server1\info\SYSINFO\UsrSize\OverLimit\UsersOverLimitThisTime.log";

如果文件很小,并且您不太关心性能,那么以下方法很简单:

$data = Import-Csv file1
$vips = Import-Csv file2
$data = $data | ?{ $vips -notcontains $_.Initials }
$data | Export-Csv file1_new -NoTypeInformation

一种更快的方法是将要删除的名称添加到集合中,但考虑到您在这里讨论的内容,我怀疑您是否会进入数千或百万用户的范围。

我使用以下代码解决了此问题:

$ArrayVIP=获取内容$VIP\u排除\u列表 选择字符串$DestinationFile-pattern$ArrayVIP-notmatch | 选择-展开线| 输出文件$DestinationFile


摘自此处:

在此处找到了部分答案:现在我只需要找到一种方法将其再次导出到CSV文件,输出文件工作正常:-)将在站点允许时添加完整的新代码。export-CSV是创建CSV文件的Cmd Let。
$SourcePath = "\\server1\info\SYSINFO\UsrSize"    
$DestinationFile = "\\server1\info\SYSINFO\UsrSize\OverLimit\UsersOverLimit1.log"    
$VIP_Exclusion_List = "\\server1\info\SYSINFO\UsrSize\OverLimit\_VIP_EXCLUSION_LIST.txt"    
$Database = "\\server1\info\SYSINFO\UsrSize\OverLimit\_UsersOverLimitDATABASE.log"    
$INT_SizeToLookFor = 100    

dir $SourcePath -Filter usr*.txt | import-csv -delimiter "`t"  | 
Where-Object {[INT] $_."Size excl. Backup/Pst" -ge $INT_SizeToLookFor} |
Select-Object Initials,"Size excl. Backup/Pst" | convertto-csv -NoTypeInformation | % { $_ -replace '"', ""} | out-file  $DestinationFile   ;

$Userlist = import-csv $DestinationFile | Select-Object Initials | 
convertto-csv -NoTypeInformation | % { $_ -replace '"', ""};

compare-object ($Userlist) (get-content $VIP_Exclusion_List) |
select-object inputObject | convertto-csv -NoTypeInformation |
% { $_ -replace '"', ""} | out-file "\\server1\info\SYSINFO\UsrSize\OverLimit\UsersOverLimitThisTime.log";
$data = Import-Csv file1
$vips = Import-Csv file2
$data = $data | ?{ $vips -notcontains $_.Initials }
$data | Export-Csv file1_new -NoTypeInformation