susannanass
Goto Top

PowerShell Excel-Tabelle nach bestimmten Werten durchsuchen und Werte in eine zweite Excel-Tabelle schreiben

Hallo Community,

ich habe zwei Excel-Dokumente, eine Server-Liste welche u.a. die Server-Namen enthält und eine Alias-Liste, welche Alias-Namen und die zugehörtigen Server-Namen enthält. Ggf. ist in der Alias-Liste ein Server-Name mehrmals gelistet, falls mehrere Aliase vergeben wurden.

Ich möchte nun mit Hilfe eines Powershell-Skriptes die Server-Namen nacheinander aus der Server-Liste auslesen, in der Alias-Liste nach dem Server-Namen suchen, und die gefundenen Aliasse aus der Alias-Liste kommasepariert in eine Spalte der Server-Liste schreiben.

Ich bin schon soweit, dass die Server-Liste durchlaufen wird und Dummy-Werte in die vorgesehene Alias-Spalte geschrieben werden, nun hänge beim Durchsuchen der Alias-Liste und dem Zusammenfügen der Aliasse zu einem kommasepariertem String. Vielleicht kann mir hierbei jemand behilflich sein.

$PfadServerListe = "\\Pfad\Server-Liste.xlsx"  
$TabelleServerListe = "VM Details"  

#Server-Liste: Spalte mit Server-Namen -> Spalte E = Spalte 5 -> VM DNS Name
[int]$SpalteServerNamen = 5       
#Server-Liste: Spalte in die Alias-Namen eingefügt werden -> Spalte O = Spalte 15 
[int]$SpalteAliasNamen = 15

#Alias-Liste
$PfadAliasListe = "\\Pfad\Alias-Liste.xlsx"  
$TabelleAliasListe = "Alias-Liste"  

#Alias-Liste: Spalte mit Alias-Namen
[int]$SpalteAliasNamenAL = 1
#Alias-Liste: Spalte mit Server-Namen
[int]$SpalteServerNamenAL = 2

#Zeile, ab welcher begonnen wird = 2 wg. vorhandener Überschriften
[int]$Zeile = 2

#String, welcher alle Aliasse eines Servers als kommaseparierte Liste enthält und in die Server-Liste geschrieben wird
[String]$ServerAliaseAL 

#Server-Liste in Excel starten
$ExcelServerListe = New-Object -ComObject excel.application
#Server-Liste anzeigen 
$ExcelServerListe.Visible = $true
$WorkbookServerListe = $ExcelServerListe.Workbooks.Open($PfadServerListe)
$TableServerListe =$WorkbookServerListe.Worksheets.Item($TabelleServerListe)
$ServerName = $TableServerListe.Cells.Item($Zeile,$SpalteServerNamen).Text

#Alias-Liste in Excel öffnen
$ExcelAliasListe = New-Object -ComObject excel.application
#Alias-Liste anzeigen
$ExcelAliasListe.Visible = $true

$WorkbookAliasListe = $ExcelAliasListe.Workbooks.Open($PfadAliasListe)
$TableAliasListe =$WorkbookAliasListe.Worksheets.Item($TabelleAliasListe)
$AliasNameAL = $TableAliasListe.Cells.Item($Zeile,$SpalteAliasNamenAL).Text
$ServerNameAL = $TabelleAliasListe.Cells.Item($Zeile,$SpalteServerNamenAL).Text
$AliasString
do {
#Servernamen aus Server-Liste auslesen
$ServerName = $TableServerListe.Cells.Item($Zeile,$SpalteServerNamen).Text

#Alias-Liste öffnen
#nach Servername $ServerName suchen
#gefundenen Alias zum Alias-String hinzufügen
#Suche fortsetzen bis das Ende der Alias-Liste erreicht ist
#Alias-String in Zelle schreiben
$TableServerListe.Cells.Item($Zeile, $SpalteAliasNamen).value2 = $AliasString
$Zeile++
}
#wiederholen, bist Ende der Server-Liste erreicht ist
while($TableServerListe.Cells.Item($Zeile,$SpalteServerNamen).Text.Length -gt 0)
#Server-Liste speichern
$WorkbookServerListe.Save()
#Excel schließen
$ExcelServerListe.Quit()
$ExcelAliasListe.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ExcelServerListe)

Content-Key: 1583728594

Url: https://administrator.de/contentid/1583728594

Printed on: April 23, 2024 at 11:04 o'clock

Member: erikro
erikro Dec 04, 2021 at 18:39:48 (UTC)
Goto Top
Moin,

eine Frage: Warum machst Du in der Zieltabelle nicht einen schlichten SVerweis? Die Servernamen dürften doch eindeutig sein.

Ansonsten: Wenn das CSV als Quelle und als Ziel hat, dann nimm die CSV-Funktionen der PS und nicht Excel. Und selbst wenn eine der Dateien Excel sein sollten, würde ich das immer erstmal in CSV umwandeln, dann auch CSV arbeiten und, wenn es denn sein muss, wieder in Excel verwandeln. Es sein denn, da müssen Formeln erhalten bleiben.

Liebe Grüße

Erik
Member: Susannanass
Susannanass Dec 06, 2021 updated at 09:58:44 (UTC)
Goto Top
Zitat von @erikro:

Moin,

eine Frage: Warum machst Du in der Zieltabelle nicht einen schlichten SVerweis? Die Servernamen dürften doch eindeutig sein.

Ansonsten: Wenn das CSV als Quelle und als Ziel hat, dann nimm die CSV-Funktionen der PS und nicht Excel. Und selbst wenn eine der Dateien Excel sein sollten, würde ich das immer erstmal in CSV umwandeln, dann auch CSV arbeiten und, wenn es denn sein muss, wieder in Excel verwandeln. Es sein denn, da müssen Formeln erhalten bleiben.

Liebe Grüße

Erik

Hallo Erik,

gute Idee, klappt wunderbar.
Einzig mein PowerShell Lernerfolg bleibt dabei auf der Strecke, vielleicht hat ja noch jemand einen PowerShell Tipp für mich. face-smile
Liebe Grüße
Anna