จะเขียนโปรแกรมAutoitเช็คuserทั้งหมดที่อยู่ในเครื่องแล้วแสดงออกมาเป็นlogfileเหมือนhijackdiscไม่ทราบว่ามีคำสั่งครอบคลุมไหมครับ
4 posters
คำสั่ง@user....
Monaliza- PSsix Member Super Class III
จำนวนข้อความ : 213
ความนิยม : 7
เข้าร่วมเมื่อ : 03/10/2010
- Post n°1
คำสั่ง@user....
POS- PSsix
-
จำนวนข้อความ : 1152
ความนิยม : 326
เข้าร่วมเมื่อ : 19/07/2010
- Post n°2
Re: คำสั่ง@user....
ใช้คำสั่งด้านล่างนี้ พอดีต้องออกไปทำธุระ ลองเอาไปแก้ไขให้ข้อมูลออกมาทางไฟล์เองนะครับ อย่างไรก็ตาม ถ้ายังแก้ให้เขียนลงไฟล์ไม่ได้เดี๋ยวพรุ่งนี้จะมาเขียนต่อให้
- Code:
Global $ary[1] = ["User"]
$NW = ObjCreate("Wscript.Network")
$namecom = $NW.ComputerName
$Acc = ObjGet("WinNT://" & $namecom & "")
$Acc.Filter = $ary
For $objUser In $Acc
ConsoleWrite( "ชื่อ " & $objUser.Name &@CRLF )
Next
Monaliza- PSsix Member Super Class III
จำนวนข้อความ : 213
ความนิยม : 7
เข้าร่วมเมื่อ : 03/10/2010
- Post n°3
Re: คำสั่ง@user....
Oh ซับซ้อนหน้าดูจะลองดูนะครับ
rolovely- PSsix Member Super Class II
จำนวนข้อความ : 193
ความนิยม : 26
เข้าร่วมเมื่อ : 15/10/2010
อายุ : 35
ที่อยู่ : THAILAND
- Post n°4
Re: คำสั่ง@user....
เขียนออกมาเป็นไฟล์ น่าจะใช้ iniwrite ว่างๆ จะลองเขียนดู ไปดีกว่า พรุ่งนี้มีเรียนเช้า
Monaliza- PSsix Member Super Class III
จำนวนข้อความ : 213
ความนิยม : 7
เข้าร่วมเมื่อ : 03/10/2010
- Post n°5
Re: คำสั่ง@user....
ลองดูแล้วขึ้นERROR ครับ
ประมาณว่าต้องประกาศตัวแปรXXXก่อนแล้วค่อยกำหนดเงื่อนไขให้เขียนค่าลงตัวแปร
แล้วค่อยให้แสดงออกมาครับ
ตรง "ชื่อ " นี้หมายชื่อไรครับ
คือคอมที่ต้องการตรวจสอบมีuser=ของเครื่องกับUSER=เครือรข่ายเป็นวงแลนเล็ก ๆมีคอมประมาณ
200เครื่องscripพอตรวจสอบไปเจอส่วนที่เกี่ยวuser=เครือรข่ายจะขึ้นERRORทันทีแถมแอนติไวรัสเด้งเตือนต้องถอดสายแลนออกก่อนถึงจะทำงานได้นะครับเดวลองดูอีกรอบ
ประมาณว่าต้องประกาศตัวแปรXXXก่อนแล้วค่อยกำหนดเงื่อนไขให้เขียนค่าลงตัวแปร
แล้วค่อยให้แสดงออกมาครับ
ตรง "ชื่อ " นี้หมายชื่อไรครับ
คือคอมที่ต้องการตรวจสอบมีuser=ของเครื่องกับUSER=เครือรข่ายเป็นวงแลนเล็ก ๆมีคอมประมาณ
200เครื่องscripพอตรวจสอบไปเจอส่วนที่เกี่ยวuser=เครือรข่ายจะขึ้นERRORทันทีแถมแอนติไวรัสเด้งเตือนต้องถอดสายแลนออกก่อนถึงจะทำงานได้นะครับเดวลองดูอีกรอบ
POS- PSsix
-
จำนวนข้อความ : 1152
ความนิยม : 326
เข้าร่วมเมื่อ : 19/07/2010
- Post n°6
Re: คำสั่ง@user....
ถ้าโปรแกรมอยากให้ประกาศตัวแปรก็ประกาศตามนั้นเลยครับ (แต่ของผมไม่ประกาศก็ไม่มีปัญหา) ใส่ Global หน้าตัวแปรสองตัว ตามโค้ดที่แก้ไขด้านล่างนี้
ลองรันดูผลออกมาก็จะได้เหมือนรูปด้านล่างนี้
[You must be registered and logged in to see this image.]
แต่ติดปัญหาอยู่อย่างหนึ่งคือ วิธีการนี้มันจะหาชื่อจากวัตถุ ซึ่งแต่ละเครื่องอาจจะมีมากน้อยไม่เท่ากันทำให้ช้า ผมลองไปหาโค้ดที่ฝรั่งทำเอาไว้ ก็เจอโค้ดด้านล่างนี้ ซึ่งทำงานได้ค่อนข้างเร็วกว่า ลองเอาไปใช้ดูครับ
- Code:
Global $ary[1] = ["User"]
Global $NW = ObjCreate("Wscript.Network")
Global $namecom = $NW.ComputerName
$Acc = ObjGet("WinNT://" & $namecom & "")
$Acc.Filter = $ary
For $objUser In $Acc
ConsoleWrite( "ชื่อ " & $objUser.Name &@CRLF )
Next
ลองรันดูผลออกมาก็จะได้เหมือนรูปด้านล่างนี้
[You must be registered and logged in to see this image.]
แต่ติดปัญหาอยู่อย่างหนึ่งคือ วิธีการนี้มันจะหาชื่อจากวัตถุ ซึ่งแต่ละเครื่องอาจจะมีมากน้อยไม่เท่ากันทำให้ช้า ผมลองไปหาโค้ดที่ฝรั่งทำเอาไว้ ก็เจอโค้ดด้านล่างนี้ ซึ่งทำงานได้ค่อนข้างเร็วกว่า ลองเอาไปใช้ดูครับ
- Code:
#include <Array.au3>
$Users = _SystemUsers(0)
_ArrayDisplay($Users)
#cs ===============================================================================
Function: _SystemUsers($AccountType = 0)
Description: Return an array with the local or domain username
Parameter(s): $AccountType: Local, domain or both username
0 = Local and Domain usernames
1 = Local usernames only
2 = Domain usernames only
Returns: An array with the list of usernames - Succeeded
@error 1 - Didn't query any username
@error 2 - Failed to create Win32_SystemUsers object
@error 3 - Invalid $AccountType
Author(s): Danny35d
#ce ===============================================================================
Func _SystemUsers($AccountType = 0)
Local $aSystemUsers
Local $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20
Local $colItems = "", $strComputer = "localhost"
If Not StringRegExp($AccountType, '[012]') Then Return SetError(3, 3, '')
$objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_SystemUsers", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Output = StringSplit($objItem.PartComponent, ',')
If IsArray($Output) Then
$Temp = StringReplace(StringTrimLeft($Output[2], StringInStr($Output[2], '=', 0, -1)), '"', '')
If $AccountType = 0 Or ($AccountType = 1 And @ComputerName = $Temp) Then
$aSystemUsers &= StringReplace(StringTrimLeft($Output[1], StringInStr($Output[1], '=', 0, -1)), '"', '') & '|'
ElseIf $AccountType = 2 And @ComputerName <> $Temp Then
$aSystemUsers &= StringReplace(StringTrimLeft($Output[1], StringInStr($Output[1], '=', 0, -1)), '"', '') & '|'
EndIf
EndIf
Next
$aSystemUsers = StringTrimRight($aSystemUsers, 1)
If $aSystemUsers = '' Then Return(SetError(1, 1, $aSystemUsers))
Return(SetError(0, 0, StringSplit($aSystemUsers, '|')))
Else
$aSystemUsers = ''
Return(SetError(2, 2, $aSystemUsers))
EndIf
EndFunc
Monaliza- PSsix Member Super Class III
จำนวนข้อความ : 213
ความนิยม : 7
เข้าร่วมเมื่อ : 03/10/2010
- Post n°7
Re: คำสั่ง@user....
ตรง"ชื่อ " นี้หมายถึงชื่อuserหรือว่าชื่อคอมครับมันerror
ตรง For $objUser
For "ERROR"
ตรง For $objUser
For "ERROR"
aut- PSsix Powerful Scripting Class
จำนวนข้อความ : 472
ความนิยม : 126
เข้าร่วมเมื่อ : 24/07/2010
- Post n°8
Re: คำสั่ง@user....
ลองใน xp sp3 ก็ไม่ขึ้น error นะ :cheers:
Monaliza- PSsix Member Super Class III
จำนวนข้อความ : 213
ความนิยม : 7
เข้าร่วมเมื่อ : 03/10/2010
- Post n°9
Re: คำสั่ง@user....
แก้ได้แล้วครับลืมเว้นวรรคหลังForไปหน่อยหนึ่ง
ถ้าต้องการให้เขียนลงไฟล์ต้องเปลี่ยนตรง
ConsoleWrite( "ชื่อ " & $objUser.Name &@CRLF )
ออกใช้ไหมครับแล้วใช้
iniwrite แทนถูกไหมครับ
ถ้าต้องการให้เขียนลงไฟล์ต้องเปลี่ยนตรง
ConsoleWrite( "ชื่อ " & $objUser.Name &@CRLF )
ออกใช้ไหมครับแล้วใช้
iniwrite แทนถูกไหมครับ
|
|