hendrikhe

read cmd output

11 posts in this topic

#1 ·  Posted

Hello AutoIt  community,

I need to read the username using the qwista command in CMD. I found so far the code below in this post:

But my MsgBox gets me an empty username :(

 

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Global $DOS, $Message = '' ;; added "= ''" for show only.

#include <MsgBoxConstants.au3>
Func _ConsoleUser()
    $pid=Run(@SystemDir&"\qwinsta","",@sw_hide,$STDERR_CHILD + $STDOUT_CHILD)
    ProcessWaitClose($pid)
    $output = StdoutRead($pid)
;   $offset=StringinStr($output,"console")
;   $username=StringStripWS(StringMid($output,$offset+18,20),3)
    $username=StringStripWS(StringMid($output,StringinStr($output,"console")+18,20),3)
    
    return $username
EndFunc

MsgBox(0, "username:", _ConsoleUser())

 

Share this post


Link to post
Share on other sites



#2 ·  Posted

Good morning @hendrikhe:)

Why do you need to use qwinsta instead of @UserName provided by AutoIt?

:)


Click here to see my signature:

Spoiler

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites

#3 ·  Posted

I will run a script with a different user but I need the current logged in username. I am able to retrieve the current loggged in user with different methods on my computer and VMware but my company computer is driving me crazy. My last hope is  qwinsta ! :(

 

Share this post


Link to post
Share on other sites

#5 ·  Posted

Shift , right click: run as different user

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

Ok.. so this is always a manual start and typing in the userid&Password?

You could just shell your script normally, prompt for this runas userid and password and then do a runas() and provide the current real user as a parameter on the commandline.

Jos

Edited by Jos

Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

#7 ·  Posted

UAC is disabled and I need the admin rights, RunAs will not work for me :(

Share this post


Link to post
Share on other sites

#8 ·  Posted

Why would that not work? There are several way to do that too. Just build the script in the initial shelled script like I do in Autoit3Wrapper.au3 script for Func RunReqAdminDosCommand()
(I assume you have the Full SciTE4AutoIt3 version installed)

Jos 

 


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

#9 ·  Posted

Yes I have the   Full SciTE4AutoIt3 version installed  , but I am very noob with  Autoit3Wrapper.au3 

I am not sure how to implement  RunReqAdminDosCommand() and RunAs, do you have me a short example?

Share this post


Link to post
Share on other sites

#10 ·  Posted

Something like this should work I guess:

#include <File.au3>
; Read the parameters to scheck whether the script is reshelled
For $x = 1 To $CMDLINE[0]
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, @UserName) ;### Debug MSGBOX
    $T_Var = StringLower($CMDLINE[$x])
    Select
        Case $T_Var = "/ReShell"
            AutoItWinSetTitle("My Reshelled AutoIt3")
            ; ---- Process the stuff that needs @Admin & RunAs ------

            ; --- end process the stuff
            Exit
    EndSelect
Next

; Main code
MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, @UserName) ;### Debug MSGBOX
; Get the Userid & Password and reshell the same script
$RunAsID = "testid"
$RunAsPW = "testpw"
$RunAsDomain = @ComputerName
RunReqAdmin('RunasWait("'& $RunAsID & '","' &  $RunAsDomain & '","' & $RunAsPW & '",0,''"' & @AutoItExe & '" "' & @ScriptFullPath & '" /ReShell /userid=' & @UserName & ''')')
; End Main code

Func RunReqAdmin($Autoit3Command)
    Local $temp_Script = _TempFile(@TempDir, "~", ".au3")
    ; Start building the tempscriptfile
    FileWriteLine($temp_Script, '#NoTrayIcon')
    If Not IsAdmin() Then
        FileWriteLine($temp_Script, '#RequireAdmin')
    EndIf
    FileWriteLine($temp_Script, $Autoit3Command)
    $RC = RunWait('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $temp_Script & '"')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $RC = ' & $RC & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ; give the runwait time to run the tempfile
    Sleep(1000)
    FileDelete($temp_Script)
EndFunc   ;==>RunReqAdmin

Jos


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

#11 ·  Posted

Function for CMD:

;~ #RequireAdmin

#include <File.au3>
If @OSArch = "X64" And Not @AutoItX64 Then _Wow64FsRedirection(0)

Local $output= _RunCmd_GetOutput("qwinsta")
;~ Local $output=_StreamCMD("ping 8.8.8.8")
Local $username=StringStripWS(StringMid($output,StringinStr($output,"console")+18,20),3)
MsgBox(0, "", $username)

Func _RunCmd_GetOutput($sCommand)
    ConsoleWrite("+Execute: " & $sCommand & @CRLF)
    Local $sOutput = '', $iPID = Run('"' & @ComSpec & '" /c ' & $sCommand, '', @SW_HIDE, 0x6)
    Do
        $sOutput &= StdoutRead($iPID)
    Until @error
    Do
        $sOutput &= StderrRead($iPID)
    Until @error
    ConsoleWrite($sOutput&@CRLF)
    Return $sOutput
EndFunc   ;==>_RunCmd


Func _StreamCMD($sCMD, $sCallBackFunction = Default, $WorkingDir = Default, $iStreamType = Default, $iShowFlag = Default, $iDelay = Default)
    If StringStripWS($sCMD, 8) = "" Then Return ""
    If $sCallBackFunction = Default Then $sCallBackFunction = "ConsoleWrite"
;~  If $WorkingDir = Default Then $WorkingDir = @SystemDir ;@WindowsDir & '\System32'
    If $WorkingDir = Default Then $WorkingDir = @WindowsDir & '\System32'
    If $iStreamType = Default Then $iStreamType = $STDERR_CHILD + $STDOUT_CHILD
    If $iShowFlag = Default Then $iShowFlag = False
    If $iDelay = Default Then $iDelay = 250
    ConsoleWrite("! Execute: " & $sCMD & @CRLF)
    Local $sTMP = '', $sSTD = '', $sCOM = '"' & @WindowsDir & '\System32\cmd.exe"' & ' /c ' & $sCMD
;~  Local $sTMP = '', $sSTD = '', $sCOM = @ComSpec & ' /c ' & $sCMD
    Local $iWin = $iShowFlag ? @SW_SHOW : @SW_HIDE
    Local $iPID = Run($sCOM, $WorkingDir, $iWin, $iStreamType)
    While 1
        $sTMP = StdoutRead($iPID, False, False)
        If @error Then ExitLoop
        If $sTMP <> "" Then
            $sTMP = StringReplace($sTMP, @CR & @CR, '')
            $sSTD &= $sTMP
            Call($sCallBackFunction,$sTMP)
;~          ConsoleWrite($sTMP)
            Sleep($iDelay)
        EndIf
    WEnd
    While 1
        $sTMP = StderrRead($iPID, False, False)
        If @error Then ExitLoop
        If $sTMP <> "" Then
            $sTMP = StringReplace($sTMP, @CR & @CR, '')
            $sSTD &= $sTMP
            Call($sCallBackFunction,$sTMP)
;~          ConsoleWrite($sTMP)
            Sleep($iDelay)
        EndIf
    WEnd
;~  If $sSTD <> "" Then ConsoleWrite(@CRLF)
    Return SetError(@error, @extended, $sSTD)
EndFunc   ;==>_StreamCMD
; * -----:|  Dao Van Trong - TRONG.WIN

Func _Wow64FsRedirection($state)
    If @OSArch = "X64" Then
        If $state Then
            ;DllCall("kernel32.dll", "int", "Wow64EnableWow64FsRedirection", "int", 1)
            DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "int", 0)
        Else
            ;DllCall('kernel32.dll', 'boolean', 'Wow64EnableWow64FsRedirection', 'boolean', False)
            DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 0)
        EndIf
        If @error Then Return SetError(1, 0, 0)
        Return 1
    EndIf
EndFunc   ;==>_Wow64FsRedirection

 


Regards,
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now