Hello everyone. I want to share with you what I have been trying to do.
Okay, I am a network admin, and when we have users who call up and need us to remote into their pc, we do not know their PC name? Some we do but there is too many to memorize. So if the employee would tell us which location they were at, all I have to do is click on my program and witing seconds, it would bring up pcname and user name in a nice display.
Okay I have gone thru working with WMI which on the network is very very slow in responding...so I have been trying to use the PSTOOLS command
"psloggedon" and the LDAP function you guys recommended to me. I love the LDAP function mixed with the shell command "psloggedon" pstool...this has proven the fastest way to bring up PC names and local logged on user..
I can locate the user and their pcname within seconds. I wanted to use the WMI and it did work after help from you guys. But it just wasnt working as fast as the below script..IT is still in it rough but it does work and fast. Plus after I am done I am going to use kix2exe gui to package it up into and EXE which I really love. Thank you all for you help..you are too cool!

now I can located a local logged on user and their pcname within seconds...





 Quote:

Break On


;*************declare and fill arrays here*****************************
Dim $Branch1, $Branch2, $Branch3, $Branch4
;fnLDAPQuery(WHAT, Optional FROM, Optional FILTER, Optional ORDER BY, Optional SCOPE, Optional USER, Optional PASSWORD)
$Branch1 = fnLDAPQuery('Name','GC://OU=Computers,OU=Forth,OU=funnycu,dc=funnycu,dc=priv','(&(objectClass=Computer)(Name=*))')
$Branch2 = fnLDAPQuery('Name','GC://OU=Computers,OU=Eighth,OU=funnycu,dc=funnycu,dc=priv','(&(objectClass=Computer)(Name=*))')
$Branch3 = fnLDAPQuery('Name','GC://OU=Computers,OU=Rd1,OU=funnycu,dc=funnycu,dc=priv','(&(objectClass=Computer)(Name=*))')
$Branch4 = fnLDAPQuery('Name','GC://OU=Computers,OU=Dr2,OU=funnycu,dc=funnycu,dc=priv','(&(objectClass=Computer)(Name=*))')


;*************Looping Engine ***************************************

For each $Element in $Branch1
$Count = $Count + 1

? 'Please wait...Looking for users and PC Names......'
shell "cmd.exe /c ping -n 1 $Element > hide.txt"

IF @ERROR = 0
$rc = RedirectOutput("findPC2.txt", 0)
? $Element
$rc = RedirectOutput("")
shell "cmd.exe /c psloggedon -l -x \\$Element > findPC1.txt"
shell "cmd.exe /c findstr /c:DOMAINNAME\ U:\findPC1.txt >> U:\findPC2.txt"
ENDIF

Next
shell "cmd.exe /c type findPC2.txt"
;?' '
? $Count
Sleep 60
shell "cmd.exe /c xcopy clean1.txt findPC1.txt /y"
shell "cmd.exe /c xcopy clean2.txt findPC2.txt /y"

;*********************************************************************
; LDAP function
;*********************************************************************

Function fnLDAPQuery($What,Optional $From,Optional $Filter,Optional $OrderBy,Optional $Scope,Optional $User,Optional $Pswd)
Dim $oCon,$oCMD,$oRS,$sQ,$aR,$C,$R
$sQ="<"+Iif($From="","LDAP://"+GetObject("LDAP://rootDSE").Get("defaultNamingContext"),$From)+">;"+$Filter+";"+Iif(VarType($What)>8192,Join($What,','),$What)+";"+Iif($Scope<>"base" AND $Scope<>"onelevel","subtree",$Scope)
$oCon=CreateObject("ADODB.Connection")
$oCon.Provider="ADsDSOObject"
$oCon.Properties("Encrypt Password").Value=1
$oCon.Properties("ADSI Flag").Value=1
If $User AND $Pswd
$oCon.Properties("User ID").Value=$User
$oCon.Properties("Password").Value=$Pswd
EndIf
$oCon.Open("Active Directory Provider")

$oCMD=CreateObject("ADODB.Command")
$oCMD.ActiveConnection=$oCon
$oCMD.CommandText=$sQ
$oCMD.Properties("Page Size").Value=1000
$oCMD.Properties("Timeout").Value=30
$oCMD.Properties("Cache Results").Value=0

If InStr($OrderBy,"distinguishedName")
$oRS=CreateObject("ADODB.Recordset")
$oRS.CursorLocation=3
$oRS.Sort=$OrderBy
$oRS.Open($sQ,$oCon,0,1,1)
Else
If $OrderBy
$oCMD.Properties("Sort On").Value=$OrderBy
EndIf
$oRS=$oCMD.Execute
EndIf
If @ERROR Exit @ERROR EndIf
If $oRS.BOF AND $oRS.EOF Exit @ERROR EndIf

$aR = $oRS.GetRows()
Dim $aFR[Ubound($aR,2),Ubound($aR,1)]
For $R=0 to Ubound($aR,2)
For $C=0 to Ubound($aR,1)
$aFR[$R,$C]=$aR[$C,$R]
Next
Next
$fnLDAPQuery=$aFR
EndFunction



Edited by itdaddy (2009-08-04 11:15 PM)
_________________________
Robert
A+, CCNA, MCP
Network Admin
Credit Union Wisconsin