Op al onze virtuele machines (1000+) wordt de virtuele NIC geüpdatet en we moeten scripten dat de data uitgelezen wordt van de oude NIC en in de nieuwe NIC ingelezen wordt.
Via WMI kunnen we eenvoudig de data uitlezen en wegschrijven naar een of ander formaat (XML, CSV, TXT...). Ook invoeren is geen probleem. Volgende Powershell snippet toont hoe ik dat doe:
Wat is het probleem dan? Wel: de twee NICs mogen niet tegelijkertijd actief zijn. De informatie moet in de NIC gepompt worden alvorens die online gaat - en dat gaat niet. Dan krijgen we een error 84 terug van SetDNSServerSearchOrder: IP not enabled on adapter.
WMI laat met andere woorden niet toe dat de netwerkadapter geconfigureerd wordt wanneer hij offline is.
NETSH biedt ook geen uitkomst:
Opnieuw: werkt perfect als de verbinding online is maar geeft "The configured DNS server is incorrect or does not exist." wanneer de verbinding offline is - blijkbaar checkt hij de verbinding met de DNS alvorens de configuratie weg te schrijven en dat kan natuurlijk niet offline.
Het gekke is: wanneer men manueel de configuratie van een NIC wilt aanpassen die offline is, dan gaat dat gewoon. Het is enkel op een geautomatiseerde manier dat we onze tanden stuk bijten.
De enige optie de we nog niet overwogen hebben is via de registry, niet omdat we angst hebben van het register maar wel omdat totaal niet duidelijk is hoe en waar deze informatie consequent, over verschillende machines heen, weggeschreven wordt.
Als iemand nog ideeën heeft hoor ik het graag.
Via WMI kunnen we eenvoudig de data uitlezen en wegschrijven naar een of ander formaat (XML, CSV, TXT...). Ook invoeren is geen probleem. Volgende Powershell snippet toont hoe ik dat doe:
C#:
1
2
3
4
5
6
7
8
9
| Param($InputFile) Clear-Host $IPRecords = @(Import-CSV $InputFile -Delimiter ";") $DNSServers = $IPRecords[0].DnsOld.Split(";") $NetInterfaces = Get-WmiObject Win32_NetworkAdapterConfiguration $NetInterface = $NetInterfaces | Where-Object {$_.Description -Like "*Intel*"} $NetInterface.EnableStatic($IPRecords[0].IPOld,$IPRecords[0].MaskOld) | Out-Null $NetInterface.SetGateways($IPRecords[0].GatewayOld) | Out-Null $NetInterface.SetDNSServerSearchOrder($DNSServers) | Out-Null |
Wat is het probleem dan? Wel: de twee NICs mogen niet tegelijkertijd actief zijn. De informatie moet in de NIC gepompt worden alvorens die online gaat - en dat gaat niet. Dan krijgen we een error 84 terug van SetDNSServerSearchOrder: IP not enabled on adapter.
WMI laat met andere woorden niet toe dat de netwerkadapter geconfigureerd wordt wanneer hij offline is.
NETSH biedt ook geen uitkomst:
code:
1
| NETSH INTERFACE SET DNS "Local Area Connection" static 10.10.0.40 |
Opnieuw: werkt perfect als de verbinding online is maar geeft "The configured DNS server is incorrect or does not exist." wanneer de verbinding offline is - blijkbaar checkt hij de verbinding met de DNS alvorens de configuratie weg te schrijven en dat kan natuurlijk niet offline.
Het gekke is: wanneer men manueel de configuratie van een NIC wilt aanpassen die offline is, dan gaat dat gewoon. Het is enkel op een geautomatiseerde manier dat we onze tanden stuk bijten.
De enige optie de we nog niet overwogen hebben is via de registry, niet omdat we angst hebben van het register maar wel omdat totaal niet duidelijk is hoe en waar deze informatie consequent, over verschillende machines heen, weggeschreven wordt.
Als iemand nog ideeën heeft hoor ik het graag.