Hallo zusammen,
würde gerne ein Tool zum auflisten der Rechner im Netzwerk bastel. Nur ich weiß gerade nicht wie und benötige dazu einen Denkanstoß.
Welche Teile der Hilfe bzw Functionen dafür nötig sind.
Gruß Icerose
Hallo zusammen,
würde gerne ein Tool zum auflisten der Rechner im Netzwerk bastel. Nur ich weiß gerade nicht wie und benötige dazu einen Denkanstoß.
Welche Teile der Hilfe bzw Functionen dafür nötig sind.
Gruß Icerose
also ich würde das im Windows Netz mit dem Dos Befehl: net view
machen. Und das Ergbnis in Autoit überarbeiten.
Franz
z.B. so
[autoit]
MsgBox(64, "", _getDOSOutput("net view"))
Func _getDOSOutput($command)
Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
While 1
$text &= StdoutRead($Pid, False, False) & @CR
If @error Then ExitLoop
Sleep(10)
WEnd
;~ Return StringReplace(StringReplace(StringStripWS($text, 7), @CR, @CRLF), @LF, @CRLF)
Return StringStripWS($text, 3)
EndFunc ;==>_getDOSOutput
je nach dem was du für Rechner "sehen" willst - vielleicht nen kleinen Massping durch Netz / Subnetz schicken und gucken wer Antwortet - damit kannste dann weiterarbieten...
hi franzp,
wie bekomme ich das jetzt in ein array??
Gruß icerose
so z.B.
#include <Array.au3>
$array = StringSplit(_getDOSOutput("net view"), @CR)
_ArrayDisplay($array)
Func _getDOSOutput($command)
Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
While 1
$text &= StdoutRead($Pid, False, False) & @CR
If @error Then ExitLoop
Sleep(10)
WEnd
;~ Return StringReplace(StringReplace(StringStripWS($text, 7), @CR, @CRLF), @LF, @CRLF)
Return StringStripWS($text, 3)
EndFunc ;==>_getDOSOutput
Du musst nur noch die ungewollten Zeilen rausfiltern.
Danke das mit dem StringSplit kannte ich nicht das war die Wissenslücke!!!
Hi,
dies geht etwas schneller:
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]Global Const $SV_TYPE_WORKSTATION = 0x1
Global Const $SV_TYPE_SERVER = 0x2
Global Const $SV_TYPE_SQLSERVER = 0x4
Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
Global Const $SV_TYPE_TIME_SOURCE = 0x20
Global Const $SV_TYPE_AFP = 0x40
Global Const $SV_TYPE_NOVELL = 0x80
Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
Global Const $SV_TYPE_DIALIN_SERVER = 0x400
Global Const $SV_TYPE_XENIX_SERVER = 0x800
Global Const $SV_TYPE_NT = 0x1000
Global Const $SV_TYPE_WFW = 0x2000
Global Const $SV_TYPE_SERVER_MFPN = 0x4000
Global Const $SV_TYPE_SERVER_NT = 0x8000
Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
Global Const $SV_TYPE_WINDOWS = 0x400000
Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
Global Const $SV_TYPE_ALL = 0xFFFFFFFF
$aCompList = _NetServerEnum($SV_TYPE_WORKSTATION)
[/autoit][autoit][/autoit][autoit]_ArrayDisplay($aCompList)
[/autoit][autoit][/autoit][autoit]Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
Local $uString = DllStructCreate("char[16]")
Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
If Not ($sDomain='' Or $sDomain='*') Then
DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
$pDomain = DllStructGetPtr($uDomain)
EndIf
Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
"ptr", 0, "int", 100, _
"ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
"ptr", DllStructGetPtr($uBufPtr,2), _
"ptr", DllStructGetPtr($uBufPtr,3), _
"int", $iSrvType, "ptr", $pDomain, "int", 0 )
If $ret[0] Then Return SetError(1, $ret[0], '')
Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
For $i=1 To DllStructGetData($uBufPtr,3)
Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
$res[$i] = DllStructGetData($uString,1)
Next
$ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
Return $res
EndFunc
Mega
das ist nich nur schneller
hier kann man direkt nach eigenschaften der einzelnen Hosts filtern.. ziemlich praktisch !
Hi,
dies geht etwas schneller:
Mega
Schöne Funktion. Wollte sie gerade nutzen, da musste ich einen Fehler / ein Problem feststellen:
Ob "$SV_TYPE_WORKSTATION" oder "$SV_TYPE_SERVER" ergibt das gleiche Ergebnis. Ich hatte erwartet das bei ersterem die Workstation's und beim zweiten nur die Server zurückgegeben werden. War aber nicht der Fall. Bei den anderen Parametern schein das richtige Ergebnis herauszukommen.
Kann es sein das sich dort noch ein Fehler eingeschlichen hat ?
Gruß
micha_he
ich glaube eher die SV_TYPE_Server stellt die Rechner dar die den Windows Service "server" gestartet haben. Dieser ist bei XP ab default an.
Beschreibung Server Dienst:
Unterstützt Datei-, Drucker- und Named-Piped-Freigabe für diesen Computer über das Netzwerk. Diese Funktionen sind nicht mehr verfügbar, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.
Was für einen Server suchst Du denn? Stehen doch genug andere Dienst zu Auswahl-
Ich hätte gerne ein Programm geschrieben, welches auf alle Arbeitsstationen (W2k & WXP) zugreift. Auf die Domänencontroller und die Dateiserver, soll es nicht zugreifen.
Also hätte ich gerne, das die o.a. Funktion alle Systeme außer Windows NT-Server & Windows 2000/2003/2008 Server, zurückgibt.
Leider tut sie das nicht. Aber Deine Aussage kann natürlich passen. Auf den W2k-Workstation-Systemen, läuft auch der Server-Dienst !
sry dass ich das alte thema wieder aufruf aber ich finde die funktion einfach genial
was ich noch benötige wäre, dass ich auch die angemeldeten leute sehe z.B. hans.meier
geht das?
Hallo achim89,
schau dir die Hilfe zu _WinNet_GetUser an,
mfg (Auto)Bert
heißt das, dass ich die funktion erst benutzen kann nachdem ich über tcp eine verbindung hergestellt hab?
mein progrmam soll aber so ablaufen, dass ich eine liste mit hostnamen und angemeldeten benutzer habe die durch anklicken eine verbindung herstellt
das hieße ich müsste bei der erstellung der liste zu jedem einzelnen eine verbindung herstellen um die funktion anzuwendne =S
das wäre aber unpraktisch denn da könnte ich theoretisch gleich mit dem serverskript das auf der anderen seite hört den benutzernamen senden
ich mein im windows netzwerk sind die namen ja bereits geladen