2017-06-28 3 views
0

Ich habe die Anforderung, alle Dateien in einem Ordner mit 2000 Unterordnern zu bearbeiten. Die Dateien und die Ordner, in denen sie sich befinden, haben die gemeinsame Qualität, den Computernamen aufgelistet zu haben. Die aufgelisteten Dateien haben genau dieselben Variablen in ihnen, die geändert werden müssen.Ersetzen von Zeichenfolgen mit Werten aus einer Excel-Tabelle

Ich versuche, eine Excel-Tabelle zu verwenden, die 3 Spalten hat; Computername, IP-Adresse und MAC-Adresse. Ich versuche, diese Tabelle zu verwenden, um die Variablen zu finden und zu ersetzen, die auf dem Computername basieren.

Wenn das Skript beispielsweise den Ordner computer1 mit den Dateien computer1.txt computer1.abc findet, sucht es die darin enthaltenen Variablen und ersetzt sie durch den Computernamen, die IP-Adresse und die MAC-Adresse, die in der entsprechenden Tabelle aufgeführt sind mit dem Computernamen.

Bis jetzt habe ich es geschafft, ein Skript zu erstellen, um die benötigten Variablen in den Dateien zu finden und sie zu ersetzen.

get-childItem -path "$env:userprofile\Desktop\Test\Computers\*\*.*" -recurse | % ` 
{ 
$filepath = $_.FullName; 
(get-content -path "$filepath") -replace '<HOST_NAME></HOST_NAME>', '<HOST_NAME>TEST</HOST_NAME>' | set-content $filepath -Force 
} 

Wie Sie sehen können, die oben genannten Änderungen alles auf den gleichen Wert, wenn ich einen Abschnitt für jeden Computer zu tun, ist, dass viele manuelle Eingabe.

Ich gehe davon aus, ein Array würde verwendet werden, aber ich bin unsicher, wie Sie dies in mein aktuelles Skript integrieren. Jede Hilfe wäre willkommen.

Antwort

0

Klingt, als könnten Sie den Ordnernamen mit dem Computernamen in Ihrer Tabelle vergleichen, um die Informationen zu erhalten. Dann können Sie diese Informationen in Ihre -replace Operationen einfügen.

$CSV = Import-CSV "C:\PathToYourSpreadsheet.csv" 
$Folders = Get-ChildItem -Path "$env:userprofile\Desktop\Test\Computers\" -Directory -Recurse 
Foreach ($Folder in $Folders) { 
    If ($CSV.ComputerName -contains $Folder.Basename) { 
     $ComputerInfo = $CSV | Where-Object {$_.ComputerName -eq $Folder.Basename} 
     $File = Get-ChildItem $Folder.Fullname -File -Include *.abc 
     #If multiple files, add another loop here 
     (Get-Content -Path $File.Fullname) -Replace '<HOST_NAME></HOST_NAME>', "<HOST_NAME>$($ComputerInfo.ComputerName)</HOST_NAME>" | Set-Content $File.Fullname -Force 
    } 
} 
+0

BenH, Danke für den Code! Ich habe es ausprobiert, als ich Änderungen an der Erweiterung der Datei vorgenommen habe, mit der ich arbeiten würde, aber nichts hat sich geändert. Ich habe zwei Ordner als Testumgebung verwendet, aber keine der Variablen wurde geändert. Ich werde weiter darauf eingehen! Danke nochmal! – kuroikenshi

Verwandte Themen