Powershell csv删除行
我有一个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
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