2016-09-16 3 views
0

Mein PowerShell-Skript lautet wie folgt. Ich habe alle Websites in der Farm als CSV-Datei unter Verwendung des Befehls Export-Csv gespeichert.Fehler beim Vergleichen von Werten beim Lesen der CSV-Datei

$farmList = Import-Csv "TestFarm.csv" 
$farmList1 = Import-Csv "OtherFarm1.csv" 
foreach ($site in $farmList) 
{ 
    Write-Host "db - ", $site 
    foreach ($farmsite in $farmList1) 
    { 
     if ($site -eq $farmsite) { 
      Write-Host "matching site found for ", $farmsite 
      break 
     } 
     Write-Host "farm - ", $farmsite 
    } 
} 

Meine Excel-Dateien im CSV sieht aus wie

Site 
/sites/TestSite 
/sites/testsite1234 
...

Die zweite Datei Excel in CSV sieht aus wie

Site 
/sites/TestSite 
/sites/testsite1234 
...

Wenn ich das Programm debuggen, ich einen Wert von $site bekommen und $farmSite als @{Site=/sites/TestSite}, aber wenn ich die Werte mit -eq vergleiche, stimmen die Werte nicht überein.

Ich habe auch versucht, Compare-Object ohne Erfolg zu verwenden.

Antwort

1

Sie müssen die Eigenschaften der Objekte Site anstelle der Objekte selbst vergleichen.

ändern diese:

if ($site -eq $farmsite) { 

in diese:

if ($site.Site -eq $farmsite.Site) { 

Wenn die Dateien nur diese eine Eigenschaft enthalten, könnten Sie es auch auf Import erweitern:

$farmList = Import-Csv "TestFarm.csv" | Select-Object -Expand Site 
$farmList1 = Import-Csv "OtherFarm1.csv" | Select-Object -Expand Site 

Letzteres würde erlauben Sie auch, Ihren Code zu vereinfachen, indem Sie einen -contains Check verwenden:

foreach ($farmsite in $farmList1) { 
    if ($farmList -contains $farmsite) { 
     Write-Host "matching site found for $farmsite" 
    } 
} 
+0

Danke @Ansgar, ich kam zu der gleichen Schlussfolgerung nach dem Blick auf die CSV-Struktur. Ich mochte Ihren Vorschlag auf enthält, das wird meinen Code erheblich vereinfachen. – Nate