Jump to content
Sign in to follow this  
flibbi

Hostnamen und IP setzen per Script - RIS Dienste

Recommended Posts

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

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

Dass der Computer nachher einer Workgroup angehört, sollte eigentlich keine Rolle spielen, einfach das Domain Joinen in der Antwortdatei unterbinden, bzw eine Arbeitsgruppe angeben.

 

 

grizzly999

Share this post


Link to post

Also ich hab das nun mal probiert, das klappt zwar, ist jedoch relativ umständlich, da jeder Computer vorher eingetragen werden muss.

 

Kann ich nicht irgendwie Scriptbasiert den Hostnamen abändern?

Share this post


Link to post

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

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...