Toon posts:

PCName script VBS werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

ik heb een VBS scriptje gemaakt om de computername te veranderen.
Dit wordt automatisch opgeroepen na een unattended install (RunOnce)
en hier wordt dan de mogelijkheid gegeven om de computernaam te veranderen.

Alleen het script werkt niet.
De naam kan wel veranderd worden, en dat wordt ook weergegeven in het scriptje.
Maar als ik reboot blijft de computername hetzelfde als van oorsprong. De naam
wordt dus niet gewijzigd tijdens de reboot.

Weet iemand waar de fout zit want ik kom er niet meer uit.

Script :
Option Explicit


Dim Message, result

Dim Title, Text1, Text2, i, default

Dim objNetwork, strUserName, strComputerName, objSystemSet, objSystem


Set objNetwork = CreateObject("Wscript.Network")

strUserName = objNetwork.UserName

strComputerName = objNetwork.ComputerName


' initialize all internal variables for the input dialog

Message = "Change you computername"

Title = "HGIS - Renaming tool"

Text1 = "User input canceled"

Text2 = "The computername is:" + vbCrLf

default = strComputerName


' We are ready to use the InputBox function

' InputBox (prompt, title, default, xpos, ypos)

' prompt: text shown in the dialog box

' title: input box title text

' default: value shown in the input field

' xpos/xpos: upper left corner of the input dialog

' If a value is omitted, VBScript set it to default


result = InputBox(Message, Title, default, 100, 100)


If result = "" Then ' Test for Cancel.

WScript.Echo Text1
HendrixGenetics (result)
Else

WScript.Echo Text2 & result
if default = result then
msgbox " Don't use the same computername"
result = InputBox(Message, Title, default, 100, 100)
else
HendrixGenetics (result)
end if


End If


Function HendrixGenetics (strresult)

dim objWMIService, objComputer, Return, OpSysSet, OpSys


MsgBox "The new computername is " & strresult


'Name = InputBox("Enter the new computer name below and click OK to continue","Rename: Step 1")

If MsgBox("Are you sure you want to reboot?", vbYesNo, "Reboot confirm") = vbNo Then
MsgBox "Action Cancelled."
Else
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery ("select * from Win32_OperatingSystem where Primary=true")

for each OpSys in OpSysSet
OpSys.Reboot ()
next
End If

end function

' Connect to Computer


(p.s. hoe krijg ik dit een zo'n sourcetable? 8)7 )

Alvast bedankt:)

[ Voor 3% gewijzigd door Verwijderd op 06-06-2008 10:31 ]


  • Krypt
  • Registratie: April 2000
  • Laatst online: 20:07
Ik zie nergens een functie staan dat de computernaam aanpast; alleen een remote shutdown functie.

Je kan de computernaam op verschillende manieren aanpassen.
Met WMI of met een registry aanpassing.
Voorbeeld 1
Voorbeeld 2

Ik zie nu dat je het ook in de RunOnce plaatst. Denk er dan wel bij dat je script onder de credentials draait waarmee ingelogd is, als dat geen admin is kan je helaas geen computernaam wijzigen. Je zou dan 1 malig een autoadminlogon kunnen uitvoeren, het script laden (en de explorer niet) en dan rebooten.

Je zou het script ook kunnen afvuren in de minisetup met bijv. de cmdlines.txt.

[ Voor 92% gewijzigd door Krypt op 06-06-2008 10:42 ]

Pvouput live


Verwijderd

Topicstarter
Dit stukje is toch om de naam aan te passen?

Of doe ik het verkeerd?

f MsgBox("Are you sure you want to reboot?", vbYesNo, "Reboot confirm") = vbNo Then
MsgBox "Action Cancelled."
Else
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery ("select * from Win32_OperatingSystem where Primary=true"

  • the_stickie
  • Registratie: Juli 2001
  • Laatst online: 14-09 11:46
Verwijderd schreef op vrijdag 06 juni 2008 @ 10:41:
Dit stukje is toch om de naam aan te passen?

Of doe ik het verkeerd?

f MsgBox("Are you sure you want to reboot?", vbYesNo, "Reboot confirm") = vbNo Then
MsgBox "Action Cancelled."
Else
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery ("select * from Win32_OperatingSystem where Primary=true"
nee das afsluiten/herstarten

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:52

Haan

dotnetter

Verwijderd schreef op vrijdag 06 juni 2008 @ 10:22:

(p.s. hoe krijg ik dit een zo'n sourcetable? 8)7 )

Alvast bedankt:)
Zet je code tussen code tags ;)

Kater? Eerst water, de rest komt later


  • Krypt
  • Registratie: April 2000
  • Laatst online: 20:07
Dat is om te rebooten. Voordeel van dat stukje script kun je ook remote machines rebooten. Zoek maar eens op "select * from Win32_OperatingSystem where Primary=true" in google, dan zie je waarvoor dat gebruikt wordt.
Door de "//./root/cimv2" geef je aan dat het de locale computer moet zijn, maar je kunt er gerust "//" & strComputerName & "/root/cimv2" van maken en de variabele strComputerName aanvullen met een computername, dan wordt die machine gereboot. Moet je daar wel rechten voor hebben natuurlijk.

Pvouput live


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je code post, gebruik dan code tags. Beperk je dan ook tot enkel de relevante code; deze lap is useless voor ons al het maar om 3 regels gaat (en zeker als je een post later blijkt te kunnen extraheren wat volgens jou relevant is).

Verder zie ik niet hoe je denkt dat een aanpassing doorgevoerd wordt, maar ik zie nergens code waar jij je PCnaam zou instellen :? En, met alle respect, dit lijkt me een copy/paste van code die ergens op het web gevonden is? (Of stukken code die je zelf gecombineerd hebt?). In dat geval is het misschien handiger om eerst een beetje te proberen te begrijpen wat het nu precies doet in plaats van met een tank op een mug te knallen ;) Ik mis dan ook vooral eigen inzicht in dit topic; zie daarvoor ook onze Programming Beleid Quickstart.

Toch nog even behulpvol wezen dan maar: Voila :Y) Hint: je moet de Rename method van de Win32_ComputerSystem Class hebben ;)

[ Voor 47% gewijzigd door RobIII op 06-06-2008 10:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:52

Haan

dotnetter

Als ik even snel google, schijnt dit de VBS manier te zijn om de computernaam op te vragen:
code:
1
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

Kater? Eerst water, de rest komt later


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Haan schreef op vrijdag 06 juni 2008 @ 10:52:
Als ik even snel google, schijnt dit de VBS manier te zijn om de computernaam op te vragen:
code:
1
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
Zo ver was 'ie al ;) Het is het opslaan van de wijziging wat niet lukt ;)

[ Voor 8% gewijzigd door RobIII op 06-06-2008 10:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:52

Haan

dotnetter

RobIII schreef op vrijdag 06 juni 2008 @ 10:54:
[...]

Zo ver was 'ie al ;) Het is het opslaan van de wijziging wat niet lukt ;)
Ik kon het niet terugvinden in de startpost 8)7 Maar mijn manier is dan ook anders, waarschijnlijk zelfs beter ;)

Kater? Eerst water, de rest komt later


  • Krypt
  • Registratie: April 2000
  • Laatst online: 20:07
code:
1
2
3
4
5
6
7
8
9
10
strNewComputerName = strresult
Set objWMIService=GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputerName & "\root\cimv2")
Set colComputers=objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
    Err = ObjComputer.Rename(strNewComputerName)
Next
Set colComputers=objWMIService.ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each objComputer in colComputers
   Err = ObjComputer.Reboot()
Next


Ben in 'n goede bui vandaag :)
Zoiets zou het moeten zijn; heb het niet getest maar dan heb je een beetje 'n idee.

Pvouput live


Verwijderd

Topicstarter
RobIII,

Idd komt deze code voor een deel van internet af.
Waarom zou ik zelf gaan typen als op internet de helft al voorgekauwd staat?

Maar ik wist niet waar het fout gaat dus dacht, ik gebruik de GOT eens ;-).
Nu kan ik zelf wel even verder prutsen.

Ik gebruik de GOT haast nooit, alleen om af en toe n vraag te vragen
dus wist ik ook niet hoe je een code kon posten.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 06 juni 2008 @ 11:03:
Waarom zou ik zelf gaan typen als op internet de helft al voorgekauwd staat?
Omdat je er niets van leert :?
Verwijderd schreef op vrijdag 06 juni 2008 @ 11:03:
Maar ik wist niet waar het fout gaat
Omdat je van copy/pasten niets leert :) Le circle est circulaire :+

[ Voor 3% gewijzigd door RobIII op 06-06-2008 11:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Bedankt allemaal,

het is me gelukt om het te veranderen zodat het wel werkt.
Heb er dit van gemaakt :

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 { 
 If MsgBox("Are you sure you want to reboot?", vbYesNo, "Reboot confirm") = vbNo Then
        MsgBox "Action Cancelled."
    Else
strNewComputerName = strresult
Set objWMIService=GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputerName & "\root\cimv2")
Set colComputers=objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
    Err = ObjComputer.Rename(strNewComputerName)
Next
Set colComputers=objWMIService.ExecQuery("select * from Win32_OperatingSystem where Primary=true")
'For Each objComputer in colComputers
          Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery ("select * from Win32_OperatingSystem where Primary=true")

  for each OpSys in OpSysSet
    OpSys.Reboot ()
  next
    End If} 
Pagina: 1