ฟอรั่ม PSsix

Would you like to react to this message? Create an account in a few clicks or log in to continue.

ฟอรั่มของบล็อก http://pssix.blogspot.com


4 posters

    คำสั่ง@user....

    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    คำสั่ง@user.... Empty คำสั่ง@user....

    ตั้งหัวข้อ by Monaliza 18/10/10, 08:21 pm

    จะเขียนโปรแกรมAutoitเช็คuserทั้งหมดที่อยู่ในเครื่องแล้วแสดงออกมาเป็นlogfileเหมือนhijackdiscไม่ทราบว่ามีคำสั่งครอบคลุมไหมครับ
    POS
    POS
    PSsix
    PSsix


    คำสั่ง@user.... Empty คำสั่ง@user.... Empty คำสั่ง@user.... Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by POS 18/10/10, 09:00 pm

    ใช้คำสั่งด้านล่างนี้ พอดีต้องออกไปทำธุระ ลองเอาไปแก้ไขให้ข้อมูลออกมาทางไฟล์เองนะครับ อย่างไรก็ตาม ถ้ายังแก้ให้เขียนลงไฟล์ไม่ได้เดี๋ยวพรุ่งนี้จะมาเขียนต่อให้

    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
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by Monaliza 18/10/10, 09:11 pm

    Oh ซับซ้อนหน้าดูจะลองดูนะครับ
    rolovely
    rolovely
    PSsix Member Super Class II
    PSsix Member Super Class II


    PSsix Game Coder
    จำนวนข้อความ : 193
    ความนิยม : 26
    เข้าร่วมเมื่อ : 15/10/2010
    อายุ : 35
    ที่อยู่ : THAILAND

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by rolovely 19/10/10, 02:34 am

    เขียนออกมาเป็นไฟล์ น่าจะใช้ iniwrite ว่างๆ จะลองเขียนดู ไปดีกว่า พรุ่งนี้มีเรียนเช้า
    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by Monaliza 19/10/10, 05:48 am

    ลองดูแล้วขึ้นERROR ครับ
    ประมาณว่าต้องประกาศตัวแปรXXXก่อนแล้วค่อยกำหนดเงื่อนไขให้เขียนค่าลงตัวแปร
    แล้วค่อยให้แสดงออกมาครับ
    ตรง "ชื่อ " นี้หมายชื่อไรครับ
    คือคอมที่ต้องการตรวจสอบมีuser=ของเครื่องกับUSER=เครือรข่ายเป็นวงแลนเล็ก ๆมีคอมประมาณ
    200เครื่องscripพอตรวจสอบไปเจอส่วนที่เกี่ยวuser=เครือรข่ายจะขึ้นERRORทันทีแถมแอนติไวรัสเด้งเตือนต้องถอดสายแลนออกก่อนถึงจะทำงานได้นะครับเดวลองดูอีกรอบ
    POS
    POS
    PSsix
    PSsix


    คำสั่ง@user.... Empty คำสั่ง@user.... Empty คำสั่ง@user.... Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by POS 19/10/10, 09:19 am

    ถ้าโปรแกรมอยากให้ประกาศตัวแปรก็ประกาศตามนั้นเลยครับ (แต่ของผมไม่ประกาศก็ไม่มีปัญหา) ใส่ Global หน้าตัวแปรสองตัว ตามโค้ดที่แก้ไขด้านล่างนี้

    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
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by Monaliza 19/10/10, 09:50 am

    ตรง"ชื่อ " นี้หมายถึงชื่อuserหรือว่าชื่อคอมครับมันerror
    ตรง For $objUser
    For "ERROR"
    aut
    aut
    PSsix Powerful Scripting Class
    PSsix Powerful Scripting Class


    PSsix Game Coder
    จำนวนข้อความ : 472
    ความนิยม : 126
    เข้าร่วมเมื่อ : 24/07/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by aut 19/10/10, 02:49 pm

    ลองใน xp sp3 ก็ไม่ขึ้น error นะ :cheers:
    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    คำสั่ง@user.... Empty Re: คำสั่ง@user....

    ตั้งหัวข้อ by Monaliza 19/10/10, 02:54 pm

    แก้ได้แล้วครับลืมเว้นวรรคหลังForไปหน่อยหนึ่ง
    ถ้าต้องการให้เขียนลงไฟล์ต้องเปลี่ยนตรง
    ConsoleWrite( "ชื่อ " & $objUser.Name &@CRLF )
    ออกใช้ไหมครับแล้วใช้
    iniwrite แทนถูกไหมครับ

      เวลาขณะนี้ 29/03/24, 08:33 am