PowerShell中的字符串匹配
我是脚本编写新手,我想请您在以下方面提供帮助: 此脚本应为计划任务,该任务与Veritas NetBackup一起工作,并以CSV格式创建备份寄存器 我正在生成两个源文件(.csv逗号分隔):PowerShell中的字符串匹配,powershell,Powershell,我是脚本编写新手,我想请您在以下方面提供帮助: 此脚本应为计划任务,该任务与Veritas NetBackup一起工作,并以CSV格式创建备份寄存器 我正在生成两个源文件(.csv逗号分隔): 一个文件包含:JobID、FinishDate、Policy等 第二个文件包含:JobID、TapeID 在第二个文件中,可能存在多个具有不同TapeID-s的相同作业ID 我想说的是,源文件1中每一行的脚本都应该检查所有源文件2,如果存在JobID匹配,如果是,它应该有以下输出: JobID,Fin
- 一个文件包含:JobID、FinishDate、Policy等
- 第二个文件包含:JobID、TapeID
JobID,FinishDate,Policy,etc...,TapeID,TapeID....
我尝试了以下逻辑,但有时我没有TapeID,或者我有两个相同的TapeID-s:
源文件1的内容在$BackupStatus中
源文件2的内容以$TapesUsed为单位
$FinalReport =
foreach ($FinalPart1 in $BackupStatus) {
write-output $FinalPart1
$MediaID =
foreach ($line in $TapesUsed){
write-output $line.split(",")[1] | where-object{$line.split(",")[0] -like $FinalPart1.split(",")[0]}
}
write-output $MediaID
}
如果CSV文件不是很大,则更易于使用,而不是手动拆分文件:
$BackupStatus = Import-Csv "Sourcefile1.csv"
$TapesUsed = Import-Csv "Sourcefile2.csv"
这将为每个文件生成对象列表。然后,您可以非常轻松地比较这些列表:
Foreach ($Entry in $BackupStatus) {
$Match = $TapesUsed | Where {$_.JobID -eq $Entry.JobID}
if ($Match) {
$Output = New-Object -TypeName PSCustomObject -Property @{"JobID" = $Entry.JobID ; [...] ; "TapeID" = $Match.TapeID # replace [...] with the properties you want to use
Export-Csv -InputObject $Output -Path <OUTPUTFILE.CSV> -Append -NoTypeInformation }
}
Foreach($BackupStatus中的条目){
$Match=$TapesUsed |其中{$\.JobID-eq$Entry.JobID}
如果($Match){
$Output=New Object-TypeName PSCustomObject-Property@{“JobID”=$Entry.JobID;[…];“TapeID”=$Match.TapeID#用您想要使用的属性替换[…]
导出Csv-InputObject$Output-Path-Append-NoTypeInformation}
}
这是一个相对冗长的变体,但我更喜欢这样。
我正在检查第一个文件中的每个条目第二个文件中是否有匹配的条目。如果有,我将第一个列表条目中的必填字段与第二个列表条目中的必填字段合并到一个对象中,然后可以轻松地使用该对象导出。谢谢!感谢您的帮助!:)