[Linuxtrent] Re: OT: getmac sotto dos [risolto]

  • From: pierluigi minati <pierluigi.minati@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Wed, 31 May 2006 12:49:15 +0200

pierluigi minati ha scritto:

E' molto OT ma qualcuno di voi guru mi potrebbe aiutare.

Sto cercando di ottenere il mac address della scheda di rete sotto dos
ma non ci riesco.
Il dos è quello striminzito del symantec ghost e finora ho provato
l'nbmac.exe e per sfizio ipconfig del 98 ma nulla.
Finora il buon google non mi è stato di nessun aiuto....
Qualcuno di voi non ha per caso un link a qualche programmino che faccia
al caso mio?


Grazie dell'aiuto

Gigi


Dopo un pò di giorni di lavoro ho risolto.

Ho abbandonato la via del rinominare la macchina il fase di clonazione. Troppe complicazioni dal punto di vista software e sistema difficile da mantenere e aggiornare.

Ho risolto con uno scrip in visualbasic che al boot di windows controlla che la macchina abbia il nome giusto e che sia nel dominio; se così non è fa le correzzioni del caso.
Riassunto a parole lo script fa questo:
1) legge il nome attuale della macchina e l'IP che il dhcp gli ha assegnato
2)cerca sul DNS il nome corrispondente all'IP: Se il PC non è registrato se ne esce con un errore, se invece il PC è registrato confronta il nome attuale con il nome sul DNS;
Se i nomi corrispondono non fa nulla altrimenti aggiorna il nome della macchina con quello del DNS.
3) Legge il dominio a cui è agganciata la macchina e verifica che sia quello corretto: se così non fosse fa il join nel dominio corretto.


Vantaggio di questo metodo:
1) Faccio la clonazione usando PXE e il tcp-IP boot disk così come creato dai tool ghost.
2) Ad ogni avvio di windows controllo che le machine siano allineate con il DNS e il dominio windows ( non si sa mai !!!!) il che porta con se il vantaggio se voglio cambiare il nome di una macchina basta modificare il DNS e tutto il resto si aggiorna di conseguenza!
3)Lo script è facilmente modificabile e aggiornabile.


Mi manca ancora una cosa marginale: l'immissione della password di amministratore avviene in chiaro.
non sono ancora riuscito a trovare un modo semplice e umano per fare l'immissione "nascosta"; ho trovato qualche modo che chiama in causa explore ma non mi piace molto, piuttosto faccio girare dall'altra parte tutto il laboratorio e immetto la passoword in chiaro.


lo script è il seguente:

strComputer = "."
' ### Dichiarazioni Costanti e variabili
strDomain = "mio.dominio.it"
DNS = "mio.DNS.it"
Searchstr1= "Nome"
Searchstr2= "pippo" ' tutti i PC si chiamano pippo-XX
Searchstr3= "."
Username = "administrator"

' ### legge il nome attuale del PC ###

Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_ComputerSystem") For Each objItem in colItems OldName = objItem.Name
Next



' ### legge l'IP del computer ### Set objWMIService = GetObject( _ "winmgmts:\\" & strComputer & "\root\cimv2") Set IPConfigSet = objWMIService.ExecQuery _ ("Select IPAddress from Win32_NetworkAdapterConfiguration ")


For Each IPConfig in IPConfigSet If Not IsNull(IPConfig.IPAddress) Then For i=LBound(IPConfig.IPAddress) _ to UBound(IPConfig.IPAddress) IPComp = IPConfig.IPAddress(i) Next End If Next

' ### Cerca sul DNS assegnato il nome corrispondente all'IP    ###
Set objShell = CreateObject("WScript.Shell")
strCommand = "nslookup "& IPComp & " " & DNS
Set objProc  = objShell.Exec(strCommand)

DNSRes = objProc.StdOut.ReadAll
t0 = Instr (1,DNSRes, "UnKnown",1)
If Not t0 = "0" Then ' ### controlla che nslook up abbia funzionato correttamente Wscript.Echo " Errore di rete: impossibile contattare il server DNS"
Else
t1 = InStr (1,DNSRes,Searchstr1,1)
If Not t1 = "0" Then ' ### controlla che il PC sia registrato sul DNS
t2 = InStr (t1,DNSRes,Searchstr2,1)
t3 = InStr (t2,DNSRes,Searchstr3,1)
lung = t3-t2
Newname = Mid (DNSRes,t2,lung)
' Wscript.Echo "New Computer Name: " & newname
' ### cambia il nome se i Newname e oldname non corrispondono oppure fa il join ne dominio o non fa nulla ###
If Not OldName = Newname Then
Wscript.Echo "Actual Computer Name is different for the name in DNS server; rename PC !!"
Password = InputBox("Enter Password local administrator ")
Set objWMIService = GetObject("Winmgmts:root\cimv2")
For Each objComputer in _
objWMIService.InstancesOf("Win32_ComputerSystem")
Return = objComputer.rename(Newname,Password,User)
If Return <> 0 Then
WScript.Echo "Rename failed. Error = " & Err.Number
Else
WScript.Echo "Rename succeeded." & " Reboot Now"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Reboot()
Next
End If
Next
Else
' ### fa il join nel dominio ### Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
dom = objComputer.Domain
Next


If Not dom = strDomain Then
Wscript.Echo "The PC isn't in domain " & strDomain & "; join in domain !!"
Password = InputBox("Enter Password local administrator ")
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")
ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain,Password, strDomain _
& "\" & Username, "OU=macchine,DC=mio,DC=dominio,DC=it", JOIN_DOMAIN + ACCT_CREATE)


If ReturnValue <> 0 Then
WScript.Echo "join domain Error = " & ReturnValue
Else
WScript.Echo "Join succeeded." & " Reboot Now"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Reboot()
Next
End If
End If End If


Else Wscript.Echo t1 & " Computer non trovato sul server DNS specificato"
End If End If



Commenti, note e "insulti vari" sono sempre i benvenuti! Grazie a tutti per l'aiuto!

Gigi


-- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts:

  • » [Linuxtrent] Re: OT: getmac sotto dos [risolto]