j3nny1981
Goto Top

Remoterechner in eine Domäne aufnehmen mit VBS/WSH

Hallo,
Ich möchte bei mehreren Remote-Rechnern (im LAN) die Rechnernamen ändern und diese dann zu einer Domäne hinzufügen.
Den Rechnernamen via "Remote" über eingabe der IP+Loakele admindaten habe ich geschafft.

Allerdings brauche ich jetzt noch ein VBS/WSH-Skript welches mir erlaubt, den Remoterechner in einer Domäne hinzuzufügen....

Ich stell mir das so vor, dass einfach IP + AdminDaten abgefragt werden, er dann connected und mich dann fragt in welche Domäne er aufgenommen werden soll, wieder mit DomänAdm_Name und Domän_Passw.
Ist das möglich? Wenn ja wie face-smile ?


Vielen Dank schonmal
Jenny

Content-Key: 52243

Url: https://administrator.de/contentid/52243

Printed on: April 18, 2024 at 23:04 o'clock

Member: Alfredus
Alfredus Feb 21, 2007 at 13:20:59 (UTC)
Goto Top
MSDN Artikel

So sollte der Domänenbeitritt funktionieren.

Gruß
Alfredus
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:25:46 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:25:54 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:00 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:06 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:12 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:17 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:25 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:30 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:36 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:44 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:49 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:26:54 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 13:27:00 (UTC)
Goto Top
ja das habe ich auch shcon gefunden,
allerdings klappt das nur wenn man das beispiel script likal ausführt...

ich will es aber über remote ausführen..
Member: bastla
bastla Feb 21, 2007 at 13:54:33 (UTC)
Goto Top
Hallo J3nny1981!

Hast Du schon versucht, in dem genannten Script die Zeile
strComputer = objNetwork.ComputerName
durch
strComputer = "Name des aufzunehmenden Computers"  
zu ersetzen?

Ansatz Nr. 2: Du könntst das Script über PsExec ausführen lassen.

Grüße
bastla
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 14:28:43 (UTC)
Goto Top
Also mein bisheriges Script um den Remotenamen zu ändern sieht so aus....
So ähnlich hatte ich mir das auch vorgestellt.... nur eben angepasst für den Domänbeitritt.
Wie kann man dieses Script anpassen?


If Right(WScript.FullName, Len(WScript.Fullname) - Len(WScript.Path) -1) = "WScript.exe" Then  
  WScript.CreateObject("WScript.Shell").Run "cmd /t:1F /k cscript //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34)  
  WScript.Quit
End If
WScript.StdOut.WriteLine String(80, "=")  
WScript.StdOut.WriteLine "(R)ename(R)emote(C)omputer" & vbCrLf  
WScript.StdOut.WriteLine String(80, "=")  
WScript.StdOut.WriteLine "Das Skript wurde am " & now & " gestartet."  
WScript.StdOut.WriteLine 
WScript.StdOut.Write "Computer oder IP-Adresse -> "  
Computer = WScript.StdIn.ReadLine()
WScript.StdOut.Write "Lokaler Administrator    -> "  
PC_Adm = WScript.StdIn.ReadLine()
WScript.StdOut.Write "Kennwort                 -> "  
PC_PSW = WScript.StdIn.ReadLine()
On Error Resume Next
Set WMILocator =CreateObject("WbemScripting.SWbemLocator")  
WMILocator.Security_.AuthenticationLevel = 6
Set WMI = WMILocator.ConnectServer(Computer, "root\cimv2" , PC_Adm, PC_PSW)  
If Err.Number = 0 Then
  WScript.StdOut.WriteLine
  WScript.StdOut.Write "Neuer Computername       -> "  
  NeuerName = WScript.StdIn.ReadLine()
  Err.Clear
  Set CompSys = WMI.ExecQuery ("Select * from Win32_ComputerSystem")  
  For Each Item In CompSys
    Item.Rename NeuerName
  Next
  If Err.Number = 0 Then
    WScript.StdOut.WriteLine Computer & " wurde in " & NeuerName & " umbenannt."  
    WScript.StdOut.WriteLine "Der Computer wird jetzt neugestartet."  
    WScript.CreateObject("WScript.Shell").Run "shutdown.exe -r -m \\" & Computer  
  Else
    WScript.StdOut.WriteLine Err.Description
  End If 
Else
  WScript.StdOut.WriteLine
  WScript.StdOut.Write "Bei dem Versuch eine Verbindung mit den Remotecomputer herzusstellen," & vbCrLf & "ist ein Fehler aufgetreten -> "  
  WScript.StdOut.WriteLine Err.Description 
End If
Member: Alfredus
Alfredus Feb 21, 2007 at 14:52:35 (UTC)
Goto Top
ich will es aber über remote ausführen..

*?*

Bei WMI ist es wurscht(naja fast immer) wo es ausgeführt wird. Entscheidend ist, auf welchen Computer die Methode Win32_ComputerSystem Class#JoinDomainOrWorkgroup() angewandt wird.

Fülle die Variable objNetwork.ComputerName mit dem Namen des PCs und gibt bei den Kontendaten die Daten eines Admins mit.

Gruß
Alfredus
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 14:58:13 (UTC)
Goto Top
mhh ich verstehs nicht,,
ich habs nun so versucht, aber es funktioniert nicht... er führt den reboot und domainänderrung lokal durch....

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

Dim intOk, Computer, PC_Adm, PC_PSW, NeueDomaene
Dim strDomain, strPassword, strUser

strDomain   = Domäne
strUser     = ADMIN
strPassword = PAsswort


If Right(WScript.FullName, Len(WScript.Fullname) - Len(WScript.Path) -1) = "WScript.exe" Then  
  WScript.CreateObject("WScript.Shell").Run "cmd /t:1F /k cscript //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34)  
  WScript.Quit
End If
WScript.StdOut.WriteLine String(80, "=")  
WScript.StdOut.WriteLine "(R)ename(R)emote(C)omputer" & vbCrLf  
WScript.StdOut.WriteLine String(80, "=")  
WScript.StdOut.WriteLine "Das Skript wurde am " & now & " gestartet."  
WScript.StdOut.WriteLine 
WScript.StdOut.Write "Computer oder IP-Adresse -> "  
Computer = WScript.StdIn.ReadLine()
WScript.StdOut.Write "Lokaler Administrator    -> "  
PC_Adm = WScript.StdIn.ReadLine()
WScript.StdOut.Write "Kennwort                 -> "  
PC_PSW = WScript.StdIn.ReadLine()
'On Error Resume Next  
Set WMILocator =CreateObject("WbemScripting.SWbemLocator")  
WMILocator.Security_.AuthenticationLevel = 6
Set WMI = WMILocator.ConnectServer(Computer, "root\cimv2" , PC_Adm, PC_PSW)  
If Err.Number = 0 Then
 'If((strDomain <> "") or (strUser <> "") or (strPassword <> "")) Then  
 Set ws = WScript.CreateObject("WScript.Shell")  

 Set objNetwork = CreateObject("WScript.Network")   
 strComputer = objNetwork.ComputerName
 
 Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _  
    strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _  
        strComputer & "'")  
 
 intOk = objComputer.JoinDomainOrWorkGroup(strDomain, _
                                                strPassword, _
                                                strDomain & "\" & strUser, _  
                                                NULL, _
                                                JOIN_DOMAIN + ACCT_CREATE)

 If intOk = 0 then
   wscript.echo SUCCESS, "Join Domain erfolgreich mit: " & strDomain  
  Else
    wscript.echo ERROR, "Join Domain fehlgeschlagen mit: " & strDomain  
 End If

 ws.Run "shutdown.exe -r -f -t 0 -c ""Windows XP wird neu gestartet""", 1, False  
End IF
Member: bastla
bastla Feb 21, 2007 at 15:15:00 (UTC)
Goto Top
Hallo J3nny1981!

In die Variable "strComputer" wird immer der lokale Computername geschrieben (siehe "strComputer = objNetwork.ComputerName"). Wenn Du stattdessen Deinen eingegebenen Computernamen "Computer" zuweist (oder in der Folge anstelle von "strComputer" nur "Computer" verwendest), hättest Du sicher eine bessere Chance ...

Grüße
bastla
Member: Alfredus
Alfredus Feb 21, 2007 at 15:24:08 (UTC)
Goto Top
h habs nun so versucht, aber es funktioniert nicht... er führt den reboot und domainänderrung lokal durch....

Ja und? So hast du es ja auch im Skript stehen!

strComputer = objNetwork.ComputerName

mach deine Eingabe des Zielrechners mit dem stdin#read hinfällig. Es wird immer der Rechner genommen auf dem das Skript ausgeführt wird!

ws.Run "shutdown.exe -r -f -t 0 -c ""Windows XP wird neu gestartet""", 1, False

Führt auf dem Rechner auf dem das Skript ausgeführt wird ein Reboot durch.

Mein Tipp: Entweder beherzigst du obige Ratschläge oder nimmst das Skript von Mircofsoft mit der Änderung von Bastla....oder latsch halt zu den PCs und hebe sie in die Domäne...

Gruß
Alfredus
Member: J3nny1981
J3nny1981 Feb 21, 2007 at 15:36:49 (UTC)
Goto Top
ok...

"strComputer = objNetwork.ComputerName"

habe ich nun in

"strComputer = Computer " umbenannt


dann meckert er aber bei :

Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")
Member: bastla
bastla Feb 21, 2007 at 17:16:06 (UTC)
Goto Top
Hallo J3nny1981!

Da waren die beiden WMI-Zugriffsmethoden vermischt. Ich kann das leider nicht selbst testen und bin daher auf Vermutungen angewiesen - ändere versuchsweise den letzten Teil auf
If Err.Number = 0 Then
    intOk = WMI.JoinDomainOrWorkGroup(strDomain, _
                                                strPassword, _
                                                strDomain & "\" & strUser, _  
                                                NULL, _
                                                JOIN_DOMAIN + ACCT_CREATE)

    If intOk = 0 then
        wscript.echo SUCCESS, "Join Domain erfolgreich mit: " & strDomain  
    Else
        wscript.echo ERROR, "Join Domain fehlgeschlagen mit: " & strDomain  
    End If
End If
Den Neustart würde ich momentan hintanstellen bzw zumindest so schreiben:
ws.Run "shutdown.exe -r -f -m \\" & Computer & " -t 0 -c ""Windows XP wird neu gestartet""", 1, False  

Grüße
bastla
Member: J3nny1981
J3nny1981 Feb 26, 2007 at 11:06:04 (UTC)
Goto Top
Hallo, also ich habe nun mein script weiter verändert, auch mit euren Vorshlägen.
So siehts nun aus. Er meldet sich ohne fehler bei dem remote rechner an. Dann fragt er die Domain ab. Dann kommt die Meldung:

"Join Domain erfolgreich mit: 0
Das Objekt unterstützt diese Eigenschaft oder Methode nicht."

Warum steht da 0 ? Normal sollte er doch die Domain angeben?


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


Dim intOk
Dim strDomain, strPassword, strUser
strDomain = INF-POOL
strUser = Joiner
strPassword = Jackhal


If Right(WScript.FullName, Len(WScript.Fullname) - Len(WScript.Path) -1) = "WScript.exe" Then
WScript.CreateObject("WScript.Shell").Run "cmd /t:1F /k cscript //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34)
WScript.Quit
End If
WScript.StdOut.WriteLine String(80, "=")
WScript.StdOut.WriteLine "(R)ename(R)emote(C)omputer" & vbCrLf
WScript.StdOut.WriteLine String(80, "=")
WScript.StdOut.WriteLine "Das Skript wurde am " & now & " gestartet."
WScript.StdOut.WriteLine
WScript.StdOut.Write "Computer oder IP-Adresse -> "
Computer = WScript.StdIn.ReadLine()
WScript.StdOut.Write "Lokaler Administrator -> "
PC_Adm = WScript.StdIn.ReadLine()
WScript.StdOut.Write "Kennwort -> "
PC_PSW = WScript.StdIn.ReadLine()
On Error Resume Next
Set WMILocator =CreateObject("WbemScripting.SWbemLocator")
WMILocator.Security_.AuthenticationLevel = 6
Set WMI = WMILocator.ConnectServer(Computer, "root\cimv2" , PC_Adm, PC_PSW)
If Err.Number = 0 Then
WScript.StdOut.WriteLine
WScript.StdOut.Write "Bitte Domänname angeben -> "
Domaene = WScript.StdIn.ReadLine()
Err.Clear
Set ws = WScript.CreateObject("WScript.Shell")

Set objNetwork = CreateObject("WScript.Network")
strComputer = computer

If Err.Number = 0 Then

intOk = WMI.JoinDomainOrWorkGroup(strDomain, _
strPassword, _
strDomain & "\" & strUser, _
NULL, _
JOIN_DOMAIN + ACCT_CREATE)

If intOk = 0 then
wscript.echo SUCCESS, "Join Domain erfolgreich mit: " & strDomain
Else
wscript.echo ERROR, "Join Domain fehlgeschlagen mit: " & strDomain
End If
End If


Dann ahbe ich noch eine frage. In einem Script welches lokal die Domaine ändert steht noch folgendes:

Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")


was bewirkt das? Bzw wie kann ich das "umbauen" das es auch mit dem remotescript funktioniert????


Vielen Dank
Jenny