我需要编辑具有2000个子文件夹的文件夹中的所有文件。它们所在的文件和文件夹共享列出计算机名称的常见质量。列出的文件中包含完全相同的变量,需要更改。
我正在尝试使用包含3列的Excel电子表格;计算机名称,IP地址和MAC地址。我正在尝试使用此电子表格根据计算机名称查找和替换变量。
例如,如果脚本找到文件夹computer1.txt computer1.abc的文件夹computer1,它将在其中找到变量并将其替换为电子表格中列出的与之对应的计算机名称,IP地址和MAC地址。计算机名称。
到目前为止,我已设法创建一个脚本来查找文件中所需的变量并替换它们。
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
}
正如您所看到的,上面将所有内容更改为相同的值,如果我为每台计算机执行一个部分,那就是大量的手动输入。
我假设将使用数组,但我不确定如何将其合并到我当前的脚本中。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以将文件夹名称与电子表格中的计算机名称进行比较,以获取相关信息。然后,您可以将该信息插入到-replace
操作中。
$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
}
}