Версия AutoIt: 3.3.8.1
Здравствуйте, подскажите пожалуйста.
Есть ПК к которому подключен принтер расшареный по сети, часто когда на него печатают другие ПК, не отключаются и сессии с \PIPE\spoolss и висят часами.
Вопрос: есть в WindowsXP стандартная утилита net.exe, как получить IP всех подключившихся в данный момент к компьютеру:
1. узнать IP и имя пользователя всех подключившихся, (сеть и статика и DHCP, постоянные только 192.168.)
2. проверить если допустим IP 1 использует ресурс \PIPE\spoolss и время простоя более 30 мин, то отключить этого пользователя, не отключая других.
что-то вот пытался сделать, но пока не получилось достать IP из массива возвращаемого из net.exe
Или я пошел не в том направлении, и возможно как-то иначе решить данную проблему встроенными функциями Autoit ?
Здравствуйте, подскажите пожалуйста.
Есть ПК к которому подключен принтер расшареный по сети, часто когда на него печатают другие ПК, не отключаются и сессии с \PIPE\spoolss и висят часами.
Вопрос: есть в WindowsXP стандартная утилита net.exe, как получить IP всех подключившихся в данный момент к компьютеру:
1. узнать IP и имя пользователя всех подключившихся, (сеть и статика и DHCP, постоянные только 192.168.)
2. проверить если допустим IP 1 использует ресурс \PIPE\spoolss и время простоя более 30 мин, то отключить этого пользователя, не отключая других.
что-то вот пытался сделать, но пока не получилось достать IP из массива возвращаемого из net.exe
Код:
#include <Constants.au3>
#include <Encoding.au3>
#include <Array.au3>
Global $sOut
Global $iPID
Global $avArray
_RunDOS('net session')
_OutResult()
;$sOut = StringTrimLeft($sOut, 166)
;$sOut = StringTrimRight($sOut, 101)
_search("\\192.168.")
_RunDOS('net files')
;MsgBox(262144+48, "Внимание!", $sOut & @LF)
_OutResult()
_search("\PIPE\spoolss")
MsgBox(262144+48, "Внимание!", $sOut & @LF) ;вместо этого будет переменная
;Run(@ComSpec & " /c net files "& $num & " /close" ,"",@sw_hide)
Exit
Func _RunDOS($sCommand)
$iPID = Run(@ComSpec & " /C " & $sCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Return SetError(@error, @extended, $iPID)
EndFunc ;==>_RunDOS
Func _OutResult()
Local $sOutres
While 1
$sOutres &= StdoutRead($iPID, False, False)
If @error Then ExitLoop
Wend
$sOut=_Encoding_CyrillicTo1251($sOutres)&@CRLF
$avArray = StringSplit($sOut, " "&@LF)
EndFunc
Func _search($sSearch)
;$iIndex = _ArraySearch($avArray, $sSearch, 0, 0, 0, 1)
Local $iIndex = _ArrayFindAll($avArray,$sSearch, 0, 0, 0, 1)
If @error Then
MsgBox(4096, "Не найдено", '"' & $sSearch & '" не был найден в массиве.')
Else
MsgBox(4096, "Найдено", '"' & $sSearch & '" найден в массиве в позиции ' & $iIndex & ".")
_ArrayDisplay($avArray, "$avArray ")
_ArrayDisplay($iIndex, "Результаты поиска в массиве $avArray")
EndIf
EndFunc
Или я пошел не в том направлении, и возможно как-то иначе решить данную проблему встроенными функциями Autoit ?