Jump to content

Hostnamen und IP setzen per Script - RIS Dienste


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Guten Morgen,

 

ich beschäftige mich seit einigen Wochen intensiv mit den Remote Installationsdiensten von Windows, was nach anfänglichen Schwierigkeiten mit dem Einbinden von Raidkarten Treibern nun aber soweit ganz gut läuft.

Nun hänge ich jedoch an einem Punkt.

 

das Szenario:

 

Linux DHCP Server in einem Netzwerk mit /24 Netz. Freigabe der Hosts per MAC Adresse und DNS (Linux DHCP "group" erstellt, in den ich dann die Windows packe, die ich installieren möchte). Der RIS Server selbst hat kein DHCP Server aktiviert.

 

Die Installation verläuft soweit wie ich will, es wird ein Standard Server 2003 64 Bit installiert, angepasst auf die verwendete Hardware sowie Firma (Treiber, OEM Logo) sowie einige Updates zur Ursprungsversion (R2, SP2).

 

Nun kann ich leider den Hostnamen + IP nicht so setzen wie ich es möchte, daher hab ich ein kleines Script gebaut. Anscheinend setzt RIS das Netzwerk immer auf "standardeinstellung", d.h. DHCP. Das ist zwar für die Installation ok, jedoch soll das System nach Fertigstellung eine feste IP haben und den DNS Hostnamen (server-xyz.domain.com)

 

Hier mein Script, das via cmdlines.txt ausgeführt wird (sicherlich etwas umständlich, ich weiß derzeit leider nicht, wie ich anders vorgehen könnte, Tipps willkommen :) ):

 


::@echo off

:: IP auslesen
FOR /F "TOKENS=2* DELIMS=:" %%A IN ('IPCONFIG /ALL ^| FIND "IP Address"') DO FOR %%B IN (%%A) DO SET IPADDR=%%B
::echo %IPADDR%

:: Hostname auslesen
FOR /F "TOKENS=2* DELIMS=:" %%C IN ('nslookup %IPADDR% 89.1xx.1xx.1xx ^| FIND "Name"') DO FOR %%D IN (%%C) DO SET HOSTNAME=%%D
::echo %HOSTNAME%

::IP ändern
netsh interface ip set address name="Local Area Connection" static %IPADDR% 255.255.255.0 89.1xx.1xx.1xx 1
netsh interface ip add dns name="Local Area Connection" addr=89.13x.1xx.1xx 
netsh interface ip add dns name="Local Area Connection" addr=89.14x.1xx.1xx 

:: Hostname ändern
::REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %HOSTNAME% /f
::REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %HOSTNAME% /f
::REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %HOSTNAME% /f
::REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %HOSTNAME% /f

:: FERTSCH

 

Was macht das Script?

 

1. IP auslesen, die ich aktuell per DHCP erhalten habe

2. Hostnamen auslesen, und zwar per nslookup aus dem Host, auf dem die deligierende Zone des Hostnamens liegt (sehr umständlich, wie ich finde, weiß leider nicht, wo ich den Hostnamen sonst "her holen" soll).

3. IP ändern

4. Hostname ändern (derzeit auskommentiert)

 

Die IP Änderung funktioniert soweit. Lasse ich jedoch mit den obigen Zeilen den Hostnamen ändern, erhalte ich zwar ein "Command completed successfully" der Windows Kommandozeile, allerdings kommt nach einem Reboot des Systems lediglich der windows Bildschirm und eine Fehlermeldung a la "Fehler in lsass.exe". Diese kann ich zwar mit ok bestätigen, allerdings rebootet der frisch installierte Server dann direkt.

 

Habt ihr vielleicht irgendwelche Tipps, wie ich das Setzen von IP und Host einfacher gestalten kann? Wie gesagt, beide Infos sind per DNS abrufbar, ich weiß nur nicht wie ich diese in RIS integrieren kann. :(

 

Anmerkung: Ich komme aus dem Linux Umfeld und administriere Windows Server erst seit ein paar Monaten, daher ist mir die Bash (derzeit) wesentlich geläufiger wie die Batch Programmierung unter Windows.

 

Für Tipps wäre ich dankbar.

 

Gruß,

 

flibbi

Link zu diesem Kommentar

Wieso den Computernamen so setzen?

 

Ich mach das bei RIS über einen "verwalteten" Computer. ich lege also das Computerkonto im AD vorher an, setze dabei das Häkchen "Verwalteter Computer" und trage dann die GUID des Computers ein. Entweder hat das BIOS eine GUID oder sie wird aus 20x Nullen plus der MAC der NIC gebildet. Die GUID, die der Rechner liefert, wird beim PXE Start angezeigt.

 

grizzly999

Link zu diesem Kommentar

Hallo,

 

nun, der Computer muss in jedem Falle einen oben genannten Namen erhalten, da er im Internet hierüber eindeutig identifizierbar und erreichbar ist.

Den Namen per Active Directory zu setzen, da kam ich noch nicht drauf, weil der zu installierende Rechner kein Domänen PC wird, sondern einer Workgroup angehört (jeder PC ist eigentlich als eigener zu bezeichnen - dediziert). Macht es da Sinn das ganze via Active Directory zu setzen? Bevor ich dort einen neuen Rechner eingetragen habe, habe ich nach der Installation auch den Hostnamen im System selbst geändert - oder irre ich da?

 

Gruß,

 

flibbi

Link zu diesem Kommentar

Hi flibbi,

 

für das auslesen der des Hostname und der IP -Addresse habe ich Dir mal ein kleines Beispiel geskriptet ;o) *grins*

 

 

Viel Spaß damit

Tom

 

ReadHostandIP.vbs

On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

strComputer ="."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Function HostN()
Dim a 	
  Set colPC = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
  For Each objItem In colPC 
      a = objItem.Name
  Next
      HostN=a
End function

Set objfs = CreateObject("Scripting.FileSystemObject")
Set objstream = objfs.CreateTextFile(HostN+".TXT")

  For Each objItem In colPC
      objstream.WriteLine "_____________________________________________"
      objstream.WriteLine " "
      objstream.WriteLine "	   Computer: " & HostN
      objstream.WriteLine "_____________________________________________"
  Next

For Each strComputer In arrComputers

Set colAdapters = objWMIService.ExecQuery _
   ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

n = 1
objstream.WriteLine

For Each objAdapter in colAdapters
  objstream.WriteLine "Network Adapter " & n
  objstream.WriteLine "-----------------"
  objstream.WriteLine
  objstream.WriteLine "Description 	: " & objAdapter.Description
  objstream.WriteLine
  'objstream.WriteLine "Host name : " & objAdapter.DNSHostName

  If Not IsNull(objAdapter.IPAddress) Then
     For i = 0 To UBound(objAdapter.IPAddress)
        objstream.WriteLine "IP address 	: " & objAdapter.IPAddress(i)
     Next
  End If

  If Not IsNull(objAdapter.IPSubnet) Then
     For i = 0 To UBound(objAdapter.IPSubnet)
        objstream.WriteLine "Subnet 		: " & objAdapter.IPSubnet(i)
     Next
  End If

  If Not IsNull(objAdapter.DefaultIPGateway) Then
     For i = 0 To UBound(objAdapter.DefaultIPGateway)
        objstream.WriteLine "Default gateway : " & _
            objAdapter.DefaultIPGateway(i)
     Next
  End If

  'objstream.WriteLine "DNS Servers : "

  If Not IsNull(objAdapter.DNSServerSearchOrder) Then
     For i = 0 To UBound(objAdapter.DNSServerSearchOrder)
     objstream.WriteLine "DNS Servers 	: " & objAdapter.DNSServerSearchOrder(i)
     Next
  End If

  objstream.WriteLine "DNS domain 	: " & objAdapter.DNSDomain

  If Not IsNull(objAdapter.DNSDomainSuffixSearchOrder) Then
     For i = 0 To UBound(objAdapter.DNSDomainSuffixSearchOrder)
        objstream.WriteLine "DNS suffix search list : " & _
            objAdapter.DNSDomainSuffixSearchOrder(i)
     Next
  End If

  objstream.WriteLine "MAC Address 	: " & objAdapter.MACAddress
  objstream.WriteLine

  IF objAdapter.DHCPEnabled = "Falsch" Then
       objstream.WriteLine "DHCP enabled 	      : No" 
  ELSE
       objstream.WriteLine "DHCP enabled 	      : Yes"  
  End If
    'objstream.WriteLine "DHCP enabled 	      : " & objAdapter.DHCPEnabled

  objstream.WriteLine "DHCP server           : " & objAdapter.DHCPServer

  If Not IsNull(objAdapter.DHCPLeaseObtained) Then
     utcLeaseObtained = objAdapter.DHCPLeaseObtained
     strLeaseObtained = WMIDateStringToDate(utcLeaseObtained)
  Else
     strLeaseObtained = ""
  End If
  objstream.WriteLine "DHCP lease obtained   : " & strLeaseObtained

  If Not IsNull(objAdapter.DHCPLeaseExpires) Then
     utcLeaseExpires = objAdapter.DHCPLeaseExpires
     strLeaseExpires = WMIDateStringToDate(utcLeaseExpires)
  Else
     strLeaseExpires = ""
  End If
  objstream.WriteLine "DHCP lease expires    : " & strLeaseExpires
  objstream.WriteLine "Primary WINS server   : " & objAdapter.WINSPrimaryServer
  objstream.WriteLine "Secondary WINS server : " & objAdapter.WINSSecondaryServer
  n = n + 1
  Next
Next
objstream.close

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...