Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Westi on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Query Remote Registry Key

Status
Not open for further replies.

dmckelvey

IS-IT--Management
May 1, 2007
2
US
I found this great script to use but it doesn't seem to execute properly.

' Declare the constantsConst HKLM = &H80000002
' HKEY_LOCAL_MACHINEConst REG_SZ = 1 ' String value in registry (Not DWORD)Const ForReading = 1 Const ForWriting = 2
' Set File objects...
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objDictionary2 = CreateObject("Scripting.Dictionary")

' Set string variables
strDomain = "DOMAINNAME" ' Your Domain
strPCsFile = "DomainPCs.txt"
strPath = "C:\scripts\" ' Create this folder
strWorkstationID = "C:\scripts\WorkstationID.txt"

If objFSO.FolderExists(strPath) Then
Wscript.Echo "This program will collect Workstation ID on remote compter(s)"
Else
Wscript.Echo "This program will collect Workstation ID on remote compter(s)"
WScript.Echo "Please create folder: <c:\scripts> then click OK."
End If

' Get list of domain PCs - Using above variables.
strMbox = MsgBox("Would you like info for entire domain: DOMAINNAME ?",3,"Hostname")
'an answer of yes will return a value of 6, causing script to collect domain PC infoIf strMbox = 6 ThenSet objPCTXTFile = objFSO.OpenTextFile(strPath & strPCsFile, ForWriting, True)Set objDomain = GetObject("WinNT://" & strDomain) ' Note LDAP does not workobjDomain.Filter = Array("Computer")For Each pcObject In objDomainobjPCTXTFile.WriteLine pcObject.NameNextobjPCTXTFile.closeElse
'an answer of no will prompt user to input name of computer to scan and create PC file
strHost = InputBox("Enter the computer you wish to get Workstation ID","Hostname"," ")
Set strFile = objfso.CreateTextFile(strPath & strPCsFile, True)
strFile.WriteLine(strHost)
strFile.Close
End If


' Read list of computers from strPCsFile into objDictionary
Set readPCFile = objFSO.OpenTextFile(strPath & strPCsFile, ForReading)
i = 0
Do Until readPCFile.AtEndOfStream
strNextLine = readPCFile.Readline
objDictionary.Add i, strNextLine
i = i + 1
Loop
readPCFile.Close

' Run the procedure defined in the Sub routine GetWorkstationID()

For each DomainPC in objDictionary
strComputer = objDictionary.Item(DomainPC)
GetWorkstationID()
Next

Set objFilesystem = Nothing

WScript.echo "Finished Scanning Network check : " & strPath

Sub GetWorkstationID()

On Error Resume next

' WMI connection to the operating system note StdRegProv
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")

If Err <> "0" Then
Exit Sub
End If

' Registry paths which hold the WorkstationID information.
unKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\AppMgmt\{fae450a5-a221-4b05-9edb-de2f210db2ec}"
unValueName = ("Deployment Name")

' Enumerate Registry subkey paths for WorkstationID.
'objReg.EnumKey HKLM, unKeyPath
Set objTextFile1 = objFSO.OpenTextFile(strWorkstationID, ForWriting,True)
'For Each Subkey in arrSubKeys
objTextFile1.WriteLine (unKeyPath & (Enter))
'Next

' Read Registry info stored in the strWorkstationID file
Set objTextFile3 = objFSO.OpenTextFile(strWorkstationID, ForReading)

'pipe the WorkstationID paths from the WorkstationID.txt file into a second dictionary
i = 0
Do Until objTextFile3.AtEndOfStream
strNextLine = objTextFile3.Readline
objDictionary2.Add i, strNextLine
i = i + 1
Loop

' These paths are used in the filenames you see in the strPath
pcName = "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\"
pcNameValueName = "ComputerName"
userPath = "Software\Microsoft\Windows NT\CurrentVersion\Winlogon\"
userValueName = "DefaultUserName"
objReg.GetStringValue HKLM,pcName,pcNameValueName,pcValue
objReg.GetStringValue HKLM,userPath,userValueName,userValue

' Build up the filename found in the strPath
strFileName = UserValue & "_" & "On" & "_" & PCValue & "_" & "Workstation ID" _
& year(date()) & right("0" & month(date()),2) _
& right("0" & day(date()),2) & ".txt"

' Write each PC's software info file...
Set objTextFile2 = objFSO.OpenTextFile(strPath & strFileName, ForWriting, True)
' Writing info to the corresponding Software info file...
objTextFile2.WriteLine(vbCRLF & "==============================" & vbCRLF & _
"Current Workstation ID " & vbCRLF & Time & vbCRLF & Date _
& vbCRLF & "ID for:" & "" & userValue & vbCRLF & "On System:" _
& "" & pcValue & vbCRLF & "----------------------------------------" & vbCRLF)

' First enumeration also clean up if error exists (Second enumaration omitted)
For Each objItem in objDictionary2
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\AppMgmt\{fae450a5-a221-4b05-9edb-de2f210db2ec}"
objReg.GetstringValue HKLM ,strKeyPath, unValueName, strValue
objTextFile2.WriteLine (strValue)
If Err Then
objDictionary2.Remove(objItem)
End If
Next

End Subwscript.Quit


I get a error on:
Line 31, Char 1, Expected Statement

If I remove the "End If" statement I get the following error on the lat line: Line 120, Char 5, Expected 'Sub'


Any help would be appreciated...Thanks!
 
Lot of EndOfLine missing in your code.

Hope This Helps, PH.
FAQ219-2884
FAQ181-2886
 
PH,

Thanks for the quick response. However, that info really doesn't help me. I have zero scripting experience and don't really know the VB syntax at all.

So it appears this script is missing a lot of "EndofLine" syntax? Is that correct?
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top