2016-06-15 5 views
0

Ich hatte Erfolg in der Vergangenheit Erstellen von Hash-Tabellen zum Nachschlagen einer genauen Übereinstimmung für eine ID in einer CSV, wenn Sie in einer anderen CSV nachschlagen, aber was ich versuche zu tun muss ganz anders sein? Ich habe 1 CSV mit jedem, der eine eindeutige LoginID und dann eine PositionID erhält. Dann habe ich in einer anderen Spalte "Reports to PositionID" mit dem Manager PositionID dort. Ich möchte die LoginID des Managers auf der Grundlage ihrer Positions-ID nachschlagen, habe aber mehrere Versuche erfolglos versucht.Wie man Manager-ID-Lookup-Hashtable erstellt

CSV Beispiel, auch wenn ich die leere erste Zeile entferne nicht Bob Person ID in Querverweis auf Berichte zu bekommen scheint, ID Überschrift Position:

Person ID Position ID Legal First Name Reports To Position ID 
      YQM000051 DIANE   YQM000076 
S9999991 YQM000052 CHARISSE  YQM000076 
S9999992 YQM000052 CHARISSE  YQM000076 
s9999993 YQM000052 CHARISSE  YQM000076 
s9999994 YQM000076 Bob    YQM000071
+0

Dies ist das dritte Mal in ein paar Stunden fragte im Grunde die gleiche Frage. Bitte tu das nicht. –

Antwort

1

Ihre Frage ist ziemlich schwer zu verstehen, ohne zu sehen, alle Beispiele, aber ich denke, Sie etwas tun könnte wie folgt aus:

#Imports CSV file as variable 
$Csvfile = Import-Csv -Path "C:\SomePath\file.csv" -Delimiter "," 

#Change 1513 to the actual managers PositionID 
$Csvfile | Where {$_.PositionID-eq "1513"} | Select -ExpandProperty LoginID 

Um zu testen, ich eine schnelle csv mit einigen Zufallszahlen erstellt:

loginID PositionID ReportstoPositionid 
1111 3654  1513 
2222 1513  54123 
3333 54123  16543564 
4444 156413  156413 
5555 16543564 3654 

Dann entschied ich, dass 1513 der Manager Position Code wäre und dann die PowerShell-Befehle oben ausgeführt, um die Loginid zu erhalten.

PS C:\> $Csvfile | Where {$_.PositionID -eq "1513"} | Select -ExpandProperty LoginID 
2222 

Wenn Sie das alles ohne eine Variable wollten Sie folgendes tun können:

PS C:\> Import-Csv -Path "C:\SomePath\file.csv" -Delimiter "," | Where {$_.PositionID -eq "1513"} | Select -ExpandProperty LoginID 
2222 

Schließlich könnten Sie die Select-Anweisung entfernen, wenn Sie die volle Linie in der CSV-Datei sehen wollte. Beispiel:

loginID PositionID ReportsPositionid 
------- ---------- ----------------- 
2222 1513  54123 

Wieder war Ihre Fragen ein wenig schwer zu verstehen, sondern auf das, was ich hier lesen ist, was ich kam mit.

Hoffe, das hilft!

EDIT

Nachdem mit den Beispieldaten testen, ich glaube, Sie folgende verwenden:

$CSV1 = Import-Csv -Path "C:\Users\Tyler\Desktop\test1.csv" -Delimiter "," 
$Manager = $CSV1 | Where {$_.'Position ID' -eq 'YQM000076'} | Select -ExpandProperty "Legal First Name" 

Write-Output "The Following Employees Report To $Manager :" 

foreach ($Row in $CSV1) 
    { 
     if ($Row.'Reports to Position ID' -eq 'YQM000076') 
      { 
       Write-Output "$Row" 
      } 
    } 

OUTPUT Sie

The Following Employees Report To Bob : 
@{Person ID=; Position ID=YQM000051; Legal First Name=DIANE; Reports To Position ID=YQM000076} 
@{Person ID=S9999991; Position ID=YQM000052; Legal First Name=CHARISSE; Reports To Position ID=YQM000076} 
@{Person ID=S9999992; Position ID=YQM000052; Legal First Name=CHARISSE; Reports To Position ID=YQM000076} 
@{Person ID=S9999993; Position ID=YQM000052; Legal First Name=CHARISSE; Reports To Position ID=YQM000076} 
+0

Hallo Tyler, ich habe keine Daten zurückbekommen, als ich eine ReportstoPositionID eingegeben habe? Ich ziehe von einer großen Liste mit vielen Managern und Angestellten unter einigen von ihnen? Meine Header haben Leerzeichen zwischen den Wörtern? Ich verwende 'single' um oder $ Row.'Position ID '. Hilft das? – MarcGel

+0

hmm, ich habe Leerzeichen zu den Headern in meinem Beispiel hinzugefügt und dann $ _. PositionID zu $ ​​_ geändert. 'Position ID' und ich habe dieselben Ergebnisse erhalten wie oben. Wie ähnlich ist Ihr CSV zu meinem obigen Beispiel? Wenn möglich, könnten Sie Ihre Frage oben mit den ersten 5 Zeilen Ihres CSV einschließlich der Header bearbeiten? Sie können die Daten ändern, ich möchte einige Tests mit genau der gleichen Formatierung ausführen. Wie wird der csv gespeichert? Ist das ein normaler CSV, MSV (MS-DOS) oder Csv (Macintosh)? –

+0

Welche Version von PowerShell verwenden Sie? Führen Sie den folgenden, um herauszufinden: $ PSVersionTable.PSVersion.Major nicht sicher, ob es darauf ankommt, noch nicht, aber es könnte eine Möglichkeit sein, die ich verwende etwas, das in einer neueren Version von Powershell eingeführt wurde. –