2017-06-28 20 views
0

2000サブフォルダを持つフォルダ内のすべてのファイルを編集する必要があります。ファイルとそのフォルダは、コンピュータ名が記載された共通の品質を共有します。リストされたファイルには、変更が必要なものとまったく同じ変数があります。文字列をExcelスプレッドシートの値に置き換える

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

スプレッドシート内のコンピュータ名とフォルダ名を比較して情報を取得できるように思えます。その後、その情報を-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 
    } 
} 
+0

BenH、ありがとうコード!私が作業しているファイルの拡張子に変更を加えたときに試してみましたが、変更はありませんでした。テスト環境として2つのフォルダを使用しましたが、変数は変更されませんでした。私はこれを見続けるでしょう!もう一度ありがとう! – kuroikenshi

関連する問題