dnix Posted February 25, 2008 Share Posted February 25, 2008 Hello all. I am trying to rewrite an existing VBscript in AutoIT that renames workstations during a new build process. The script seemes to work fine on an XP machine, but does not work on a Vista machine. I am not getting any errors, the script runs and just doesnt work. Heres the code:; - New computer name exists in buildomatic.txt file line #10 formatted like so:; [newpcname]computername;; Set error handler$fErrors = ObjEvent("AutoIt.Error","err_handle")$wbemFlagReturnImmediately = 0x10$wbemFlagForwardOnly = 0x20$colItems = ""$strComputer = "localhost";$newname = "loudwn5510t60b";; Open BuildoMatic.txt file$File = FileOpen("C:\Windows\Options\Build\Buildomatic.txt", 0)if $File = -1 Then MsgBox(0,"Error","BuildoMatic.txt File not found!" & @CRLF & "Script cannot continue.") ExitEndIf; Read the three lines we need$ClientIDLine = FileReadLine($File,10); Close the fileFileClose($File); If we have an error of any sort, it's because the file didn't read correctly somehowif @error = -1 Then MsgBox(0,"Error","Buildomatic.txt is missing data for ClientID or is corrupt" & @CRLF & "Script cannot continue.") ExitEndIf; Check to make sure the line that should contain Tech ID data really does...if not StringInStr($ClientIDLine,"[newpcname]") Then MsgBox(0,"Error","Buildomatic.txt is missing data for ClientID or is corrupt" & @CRLF & "Script cannot continue.") ExitEndIf; Break out the Client ID from the raw input line$PosTI = StringInStr($ClientIDLine,"]") + 1$newname = StringMid($ClientIDLine,$PosTI)$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) then For $objComputer in $colItems $err = $objComputer.Rename($newName) NextElse Msgbox(0,"<!> Build Error <!>","COMPUTER NOT RENAMED - No WMI Objects Found for class: " & "Win32_ComputerSystem" )EndifFunc err_handle() $HexNumber = hex($fErrors.number,8) Msgbox(0,"","Error Intercept !" & @CRLF & _ "Error Number is: " & $HexNumber & @CRLF & _ "Line Number is: " & $fErrors.scriptline & @CRLF & _ "Global Description is: " & $fErrors.description & @CRLF & _ "Windows Description is: " & $fErrors.windescription ) SetError(1)Endfunc Link to comment Share on other sites More sharing options...
MHz Posted February 25, 2008 Share Posted February 25, 2008 ; If we have an error of any sort, it's because the file didn't read correctly somehow if @error = -1 Then MsgBox(0,"Error","Buildomatic.txt is missing data for ClientID or is corrupt" & @CRLF & "Script cannot continue.") Exit EndIfChecking @error after FileClose is not common and -1 is not what FileClose is document as a value that @error can have. So I think it is redundant code as you already checked at the point of using FileOpen to check the handle. Your next check seems better so that block of code above is redundant? Since this works in XP, then try adding #requireadmin at the top of the script and try it again as you may not have admin powers under Vista perhaps when executing it and I would consider you need admin powers. And consider using tags. Use the tag at the start of your code and the other tag at the end of the code. :) Link to comment Share on other sites More sharing options...
dnix Posted February 25, 2008 Author Share Posted February 25, 2008 It actually ended up being something I cant exactly find any documentation for. Apparently with Vista you have to pass in a password and account name parm with the WMI rename verb:In Vista this doesnt work:$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) For $objComputer in $colItems $err = $objComputer.Rename($newname) NextBut this does work:$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) For $objComputer in $colItems $err = $objComputer.Rename($newname,"<passwordhere>","<accountnamehere>") NextI was only able to track this down when I added a msgbox to display the return value of $err, at which point I started seeing errors indictaing password was incorrect. Oddly enough both versions work on XP. >.< Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now