itdaddy
Starting to like KiXtart
Registered: 2006-12-19
Posts: 145
Loc: Wisconsin
|
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...
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
|