ice2921 Posted October 6, 2015 Posted October 6, 2015 Hello,I feel as though this may be an easy question for you experts out there, but Ill ask anyway. I would like to utilize AutoIT for script that would prompt a user for their username and password. I know that this can done a variety of ways, but I am unsure what the easiest rout is. The computers that the script will be running from are on a WORKGROUP and not part of the domain that has network shares.Ive been looking at this script that member Zedna wrote, but I tested it and it didn't seem like it was working from a computers outside the domain.expandcollapse popup#AutoIt3Wrapper_icon=your_icon.ico #AutoIt3Wrapper_Run_Obfuscator=y #obfuscator_parameters=/striponly #NoTrayIcon #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GuiStatusBar.au3> Global $ext = StringRight(@ScriptName, 4) ; .exe or .au3 Global $ini = StringReplace(@ScriptName,$ext,'.ini') Global $ini_device = IniRead($ini, "Options", "Device", "X:") Global $ini_share = IniRead($ini, "Options", "Share", "\\filerserver\") If StringRight($ini_share, 1) <> "\" Then $ini_share &= "\" $Form1 = GUICreate("Connect To Your Drive", 265, 140) $username_id = GUICtrlCreateInput("", 88, 16, 153, 21) $password_id = GUICtrlCreateInput("", 87, 44, 153, 21, $ES_PASSWORD) GUICtrlCreateLabel("&Username", 24, 16, 52, 17) GUICtrlCreateLabel("&Password", 26, 46, 50, 17) $connect = GUICtrlCreateButton("&Connect", 24, 80, 217, 33, BitOr($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON)) $StatusBar1 = _GUICtrlStatusBar_Create($Form1) _GUICtrlStatusBar_SetText($StatusBar1, $ini_device & " --> " & $ini_share) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $connect Connect() EndSwitch WEnd Func Connect() $username = GUICtrlRead($username_id) $password = GUICtrlRead($password_id) If $username = '' Or $password = '' Then MsgBox(16, 'Error', 'Empty username or password') Return EndIf If DriveMapGet($ini_device) <> '' Then ; very fast MsgBox(16, 'Error', 'The device is already assigned') Return EndIf GUISetCursor(15,1) DriveMapAdd($ini_device, $ini_share & $username, 0, $username, $password) ; slow If @error Then Switch @error Case 1 $err_message = 'Undefined / Other error. Windows API return code: ' & @extended Case 2 $err_message = 'Access to the remote share was denied' Case 3 $err_message = 'The device is already assigned' Case 4 $err_message = 'Invalid device name' Case 5 $err_message = 'Invalid remote share' Case 6 $err_message = 'Invalid password' EndSwitch GUISetCursor(2) MsgBox(16, 'Error', $err_message) Else ; everything OK Exit EndIf EndFunc
ViciousXUSMC Posted October 6, 2015 Posted October 6, 2015 The most super simple way to get user input from a code standpoint is InputBox() but with the GUI creation tools out there you can make a GUI very easily as well and it could be a bit better presentation and give you more options/expandability. So I would start with basic first, get it working and then improve as needed/desired.For mapping drives I still use CMD Net Use as DriveMapAdd kind was flaky for me.;Just an example may not be runnable code $sUser = InputBox("Input Your Username", "Input Your Username") $sPass = InputBox("Input Your Password", "Input Your Password") Run(@ComSpec & " /k Net Use H: \\MyDirectory\Share /Persistent:Yes /User:" & $sUser & " " & $sPass)Depending on your environment if the connection username is the same as the current user name just use the macro @Username and don't ask the person to enter it. You can add the @SW_HIDE and such to the cmd so that you do not see the cmd window open briefly. Etc.
jguinch Posted October 6, 2015 Posted October 6, 2015 Look at the flags parameters in the DriveMapAdd help page : $DMA_AUTHENTICATION (8) = Show authentication dialog if required Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF
ice2921 Posted October 7, 2015 Author Posted October 7, 2015 So my main issue it that the computers are part of a WORKGROUP and need to authenticate against Active Directory. I do not want to store the password. All I want it to do is prompt for it.
jguinch Posted October 7, 2015 Posted October 7, 2015 OK, I understand. Did you try what I said ? Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF
ice2921 Posted October 7, 2015 Author Posted October 7, 2015 I was looking here https://www.autoitscript.com/autoit3/docs/functions/DriveMapAdd.htm but to be honest im a little confused.
ice2921 Posted October 7, 2015 Author Posted October 7, 2015 Also I though those flags were defined here in the code I originally posted:DriveMapAdd($ini_device, $ini_share & $username, 0, $username, $password) ; slow
jguinch Posted October 7, 2015 Posted October 7, 2015 Can you try this ?DriveMapAdd($ini_device, $ini_share & $username, $DMA_AUTHENTICATION)Don't forget the include AutoItConstants.au3 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF
ice2921 Posted October 7, 2015 Author Posted October 7, 2015 Can you try this ?DriveMapAdd($ini_device, $ini_share & $username, $DMA_AUTHENTICATION)Don't forget the include AutoItConstants.au3So what its doing now is prompting me twice for credentials. I think its looking for the domain name before the username. See attachment.
jguinch Posted October 7, 2015 Posted October 7, 2015 Did you try to put the domain name before the username ?DriveMapAdd($ini_device, $ini_share & $username, 0, "DomainName\" & $username, $password) ; replace DomainName by the good one Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF
ice2921 Posted October 7, 2015 Author Posted October 7, 2015 I added the domain name in the "DomainName\" got another error
jguinch Posted October 7, 2015 Posted October 7, 2015 error 2202 is ERROR_BAD_USERNAME : https://msdn.microsoft.com/en-us/library/windows/desktop/ms681386(v=vs.85).aspxCan you try with the net use command in a command prompt ? Look at the syntax ViciousXUSMC used in #2, and test with or without the domain name before the username. Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF
ice2921 Posted October 8, 2015 Author Posted October 8, 2015 The most super simple way to get user input from a code standpoint is InputBox() but with the GUI creation tools out there you can make a GUI very easily as well and it could be a bit better presentation and give you more options/expandability. So I would start with basic first, get it working and then improve as needed/desired.For mapping drives I still use CMD Net Use as DriveMapAdd kind was flaky for me.;Just an example may not be runnable code $sUser = InputBox("Input Your Username", "Input Your Username") $sPass = InputBox("Input Your Password", "Input Your Password") Run(@ComSpec & " /k Net Use H: \\MyDirectory\Share /Persistent:Yes /User:" & $sUser & " " & $sPass)Depending on your environment if the connection username is the same as the current user name just use the macro @Username and don't ask the person to enter it. You can add the @SW_HIDE and such to the cmd so that you do not see the cmd window open briefly. Etc.So I actually got this to work. I no have two questions:1. How do I suppress the command prompts from coming up?2. How do I add a share with a space in it. like \\server\my share vs \\server\myshare do I need to use quotes?
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now