Spikemg1 Posted November 20, 2018 Share Posted November 20, 2018 (edited) Hello, I am trying to make my job as a help desk specialist easier. The main function I am trying to get my GUI to do is take my input and place it into the various programs I use when adding a user to our system. I have the initial GUI set up so far but it only has the first tab done. In total there are roughly 8 locations I need to input new user info into our system. Currently it takes about 45 minutes to an hour to set up 1 user. I am hoping this will bring down the time. Once my co-worker retires her in a year or so. I don't want the new person that would replace her have to go through what I did. Just to learn how to add a user. Also this would theoretically eliminate any user errors that happen on a monthly basis for my co-worker. With that being said. The first issue I am running into is getting my GUI to check to see if my .msc is open and bring forward, if not then open and bring it forward. The next part after that I don't quite understand, is how to take my user input and place it into that program. If anyone could give me a hand that would be amazing. I am completely willing to learn as well if you would want to give me what I am looking for in a teaching format. P.S. This is the current state of my script. expandcollapse popup;================================= ;User Creation GUI Version 0.0.7 ;Adding a user to Active Directory ;Created by: Spikemg1 ;================================= #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y #include <AD.au3> #include <Array.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> ;Opens a connection to Active Directory _AD_Open() If @error Then Exit MsgBox(16, "Active Directory Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended) #Region ### START Koda GUI section ### Form=\\wch.wchosp.org\userfolders\mgallion\my documents\projects\tabs.kxf ;All Global variables Global $aOUs = _AD_GetAllOUs() Global $callOU = ObjCreate("Scripting.Dictionary") Global $itemBoxOptions1 = "" Global $itemBoxOptions2 = "" Global $itemBox1, $itemBox2 Global $firstName, $givenName Global $lastName, $surName Global $iuserName, $userName Global $Combo1, $Combo2 ;GUI Creation Global $Form1_1_1 = GUICreate("Tab Sheet Ver. 1.0.0", 757, 452, 192, 143) ;AD Tab Sheet==================================================================== GUICtrlCreateTab(0, 0, 753, 449) Global $TabSheet1 = GUICtrlCreateTabItem("ActiveDirectory") ;Group 1 of AD Tab Global $ADGroup1 = GUICtrlCreateGroup("AD User Name Screen", 8, 32, 737, 105) ;New User First Name Global $Label3 = GUICtrlCreateLabel("First Name", 16, 51, 54, 17) $firstName = GUICtrlCreateInput("", 80, 51, 225, 21) ;New User Last Name Global $Label2 = GUICtrlCreateLabel("Last Name", 16, 75, 55, 17) $lastName = GUICtrlCreateInput("", 80, 75, 225, 21) ;New User LogOn Name Global $Label1 = GUICtrlCreateLabel("User LogOn Name", 16, 107, 92, 17) $userName = GUICtrlCreateInput("", 112, 107, 201, 21) ;Copy From User Template Global $Label4 = GUICtrlCreateLabel("Copy From", 320, 91, 54, 17) $Combo1 = GUICtrlCreateCombo("", 392, 91, 345, 25, BitOR($CBS_DROPDOWN,$WS_VSCROLL)) ;Determines Where the New User Goes in AD Global $Label5 = GUICtrlCreateLabel("Folder Location", 312, 48, 77, 17) $Combo2 = GUICtrlCreateCombo("", 392, 48, 345, 25, BitOR($CBS_DROPDOWN,$WS_VSCROLL)) For $iOU = 1 to $aOUs[0][0] $callOU.Add($aOUs[$iOU][0] , $aOUs[$iOU][1]) If($itemBoxOptions1 = "") Then $itemBoxOptions1 = $aOUs[$iOU][0] Else $itemBoxOptions1 = $itemBoxOptions1 & "|" & $aOUs[$iOU][0] EndIf Next $itemBox1 = GUictrlread($itemBoxOptions1) GUICtrlSetData($Combo2, $itemBoxOptions1 , 'WCHUsers\TEST') ;End of AD Tab Group 1 ;Group 2 of AD Tab GUICtrlCreateGroup("", -99, -99, 1, 1) Global $ADGroup2 = GUICtrlCreateGroup("AD Password Screen", 8, 144, 737, 121) Global $Password = GUICtrlCreateLabel("Password", 16, 168, 50, 17) Global $ConfirmPassword = GUICtrlCreateLabel("Confirm", 16, 192, 39, 17) Global $PasswordInput = GUICtrlCreateInput("", 72, 168, 217, 21, $ES_PASSWORD) Global $ConfirmInput = GUICtrlCreateInput("", 64, 192, 225, 21, $ES_PASSWORD) Global $Checkbox1 = GUICtrlCreateCheckbox("User must change password at next logon", 312, 160, 289, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global $Checkbox2 = GUICtrlCreateCheckbox("User cannot change password", 312, 184, 289, 17) Global $Checkbox3 = GUICtrlCreateCheckbox("Password never expires", 312, 208, 289, 17) Global $Checkbox4 = GUICtrlCreateCheckbox("Account is disabled", 312, 232, 289, 17) ;End of AD Tab group 2 ;Group 3 of AD Tab. GUICtrlCreateGroup("", -99, -99, 1, 1) Global $ADGroup3 = GUICtrlCreateGroup("Additional Information", 8, 272, 737, 137) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) ;End of AD Tab Group 3 Global $CreateButton = GUICtrlCreateButton("Create Account", 568, 416, 91, 25) Global $ExitButton = GUICtrlCreateButton("Exit", 664, 416, 75, 25) ;End of AD Tab Sheet============================================================= #EndRegion ### END Koda GUI section ### While 1 Global $nMsg = GUIGetMsg() Switch $nMsg Case $CreateButton ;Check for user first name $givenName = GUICtrlRead($firstName) If $givenName <> '' Then ConsoleWrite($givenName & @CRLF) Else MsgBox(0, 'error', 'Please provide user first name.') EndIf ;Check for user last name $surName = GUICtrlRead($lastName) If $surName <> '' Then ConsoleWrite($surName & @CRLF) Else MsgBox(0, 'Error', 'Please provide user last name.') EndIf ;Check for user logon name $iuserName = GUICtrlRead($userName & @CRLF) If $iuserName <> '' Then ConsoleWrite($iuserName & @CRLF) Else MsgBox(0, 'Error', 'Please provide a user logon name.') EndIf ;Review all info submitted MsgBox(1, 'Review User Info', _ 'First Name: ' & $givenName _ & @CRLF & 'Last Name: ' & $surName _ & @CRLF & 'LogOn Name: '& $iuserName _ & @CRLF & 'User Destination:' & GUICtrlRead($Combo2) _ & @CRLF & 'Copied User Template:' & GUICtrlRead($Combo1) _ & @CRLF) Case $ExitButton Exit Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ;Close connection to Active Directory _AD_Close() Edited November 29, 2018 by Spikemg1 Link to comment Share on other sites More sharing options...
Nine Posted November 20, 2018 Share Posted November 20, 2018 Welcome to AutoIt forum. When you want to submit code, use <> it is easier for us to view the code instead of having to download it. you probably want to use ShellExecute to open mmcWCH.msc ? “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Screen Scraping Multi-Threading Made Easy Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 20, 2018 Author Share Posted November 20, 2018 Took me about 5 minutes to figure out what you meant. Here you go. What happens is, if its closed it opens the .msc. If it's open, it opens another instance of the program. expandcollapse popup#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form=\\wch.wchosp.org\userfolders\mgallion\my documents\projects\tabs.kxf Global $Form1_1 = GUICreate("Tab Sheet Ver. 1.0.0", 620, 452, 244, 181) GUICtrlCreateTab(0, 0, 617, 449) Global $TabSheet1 = GUICtrlCreateTabItem("ActiveDirectory") Global $ADGroup1 = GUICtrlCreateGroup("AD User Name Screen", 8, 32, 601, 105) Global $Label3 = GUICtrlCreateLabel("First Name", 16, 51, 81, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $Input3 = GUICtrlCreateInput("", 104, 51, 209, 21) Global $Label2 = GUICtrlCreateLabel("Last Name", 16, 75, 81, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $Input2 = GUICtrlCreateInput("", 104, 75, 209, 21) Global $Label1 = GUICtrlCreateLabel("User LogOn Name", 16, 107, 136, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $Input1 = GUICtrlCreateInput("", 160, 107, 153, 21) Global $Label4 = GUICtrlCreateLabel("Copy From", 320, 91, 81, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $Combo1 = GUICtrlCreateCombo("", 408, 91, 193, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) Global $Label5 = GUICtrlCreateLabel("Folder Location", 320, 48, 114, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $Combo2 = GUICtrlCreateCombo("", 440, 48, 161, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUICtrlCreateGroup("", -99, -99, 1, 1) Global $ADGroup2 = GUICtrlCreateGroup("AD Password Screen", 8, 144, 601, 121) Global $Password = GUICtrlCreateLabel("Password", 16, 168, 73, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $ConfirmPassword = GUICtrlCreateLabel("Confirm", 16, 192, 59, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $PasswordInput = GUICtrlCreateInput("", 96, 168, 193, 21, $ES_PASSWORD) Global $ConfirmInput = GUICtrlCreateInput("", 96, 192, 193, 21, $ES_PASSWORD) Global $Checkbox1 = GUICtrlCreateCheckbox("User must change password at next logon", 312, 160, 289, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global $Checkbox2 = GUICtrlCreateCheckbox("User cannot change password", 312, 184, 289, 17) Global $Checkbox3 = GUICtrlCreateCheckbox("Password never expires", 312, 208, 289, 17) Global $Checkbox4 = GUICtrlCreateCheckbox("Account is disabled", 312, 232, 289, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) Global $SaveButton = GUICtrlCreateButton("Save", 456, 416, 75, 25) Global $ExitButton = GUICtrlCreateButton("Exit", 536, 416, 75, 25) Global $TabSheet2 = GUICtrlCreateTabItem("Meditech") Global $SaveButton2 = GUICtrlCreateButton("Save", 456, 416, 75, 25) Global $ExitButton2 = GUICtrlCreateButton("Exit", 536, 416, 75, 25) Global $TabSheet3 = GUICtrlCreateTabItem("Kronos") Global $TabSheet4 = GUICtrlCreateTabItem("Healthstream") Global $TabSheet5 = GUICtrlCreateTabItem("Wombat") Global $TabSheet6 = GUICtrlCreateTabItem("Foxmail") Global $TabSheet7 = GUICtrlCreateTabItem("Outlook") GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $SaveButton If Not WinActive('mmcWCH - [Console Root]') Then ShellExecute("C:\Users\Public\Desktop\mmcWCH.msc") WinWaitActive('mmcWCH - [Console Root]') EndIf Case $ExitButton Exit case $SaveButton2 Case $ExitButton2 Exit Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Link to comment Share on other sites More sharing options...
ModemJunki Posted November 20, 2018 Share Posted November 20, 2018 Maybe you mean to do something like this? While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $SaveButton If Not WinExists("mmcWCH") Then ShellExecute("C:\Users\Public\Desktop\mmcWCH.msc") If Not WinActive('mmcWCH - [Console Root]') Then WinActivate("mmcWCH") Else If Not WinActive('mmcWCH - [Console Root]') Then WinActivate("mmcWCH") EndIf Case $ExitButton Exit Case $SaveButton2 Case $ExitButton2 Exit Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Always carry a towel. Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 20, 2018 Author Share Posted November 20, 2018 Awesome that fixed that, and I see where my mistake was. So WinExists just checks if the window is running first right? Link to comment Share on other sites More sharing options...
ModemJunki Posted November 20, 2018 Share Posted November 20, 2018 1 minute ago, Spikemg1 said: So WinExists just checks if the window is running first right? In general, highlight the built-in function name in SciTE and press F1 for (partial) enlightenment ... Always carry a towel. Link to comment Share on other sites More sharing options...
Nine Posted November 20, 2018 Share Posted November 20, 2018 or you could do this without redundancy If Not WinExists("mmcWCH") Then ShellExecute("C:\Users\Public\Desktop\mmcWCH.msc") If Not WinActive('mmcWCH - [Console Root]') Then WinActivate("mmcWCH") “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Screen Scraping Multi-Threading Made Easy Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 20, 2018 Author Share Posted November 20, 2018 1 minute ago, ModemJunki said: In general, highlight the built-in function name in SciTE and press F1 for (partial) enlightenment ... Genious.... Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 20, 2018 Author Share Posted November 20, 2018 Actually is there a way to take user input variable and add it to a powershell script to add-ADUser? I'm thinking that would be easier since the first thing we need to add them to is Active Directory. Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted November 20, 2018 Share Posted November 20, 2018 @Spikemg1 Thanks to @water, you can use directly AD UDF to manage Active Directory stuffs Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 21, 2018 Author Share Posted November 21, 2018 16 hours ago, FrancescoDiMuro said: @Spikemg1 Thanks to @water, you can use directly AD UDF to manage Active Directory stuffs I'm not quite sure what it is I am looking at on this link.... Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted November 21, 2018 Share Posted November 21, 2018 (edited) @Spikemg1 Do you need to manage things in the Active Directory? Then use the UDF linked in the previous post Edited November 21, 2018 by FrancescoDiMuro Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 21, 2018 Author Share Posted November 21, 2018 5 hours ago, FrancescoDiMuro said: @Spikemg1 Do you need to manage things in the Active Directory? Then use the UDF linked in the previous post I am trying to avoid using pre-made code since I am trying to learn how to do it myself. Thanks for the link though. Link to comment Share on other sites More sharing options...
BrewManNH Posted November 22, 2018 Share Posted November 22, 2018 Premade code is like a book written to tell you how to do it, read the code that the functions provide, and learn from that. No need to reinvent the wheel, just learn from a wheel maker how it's done. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
Developers Jos Posted November 22, 2018 Developers Share Posted November 22, 2018 23 hours ago, Spikemg1 said: I am trying to avoid using pre-made code since I am trying to learn how to do it myself. Thanks for the link though. Ok, so you won't be using AutoIt3 nor C# and will write your script in assembler? Just so you understand this comment: AutoIt3 has many build in functions and User Defined Functions, which are the base you use for your scripts. I can assure you you won't want to code it all yourself unless you have ample time available. Jos FrancescoDiMuro 1 SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 26, 2018 Author Share Posted November 26, 2018 Ok, that makes more sense to me. thank you. I will look into these then. Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 26, 2018 Author Share Posted November 26, 2018 Is there a way to log all processes to verify that it worked? Like Log user who ran the script with username timestamps and the such? Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 26, 2018 Author Share Posted November 26, 2018 Also How do you add OU locations to a combobox input? Link to comment Share on other sites More sharing options...
water Posted November 26, 2018 Share Posted November 26, 2018 Let's descibe some basics: The AD UDF uses an API to directly access Active Directory - it doesn't automate a GUI. That's what your mmc does with with the input you provide via the gui. Can you please describe what you want to achieve? I got from the code you posted: create a new user and set firstname, lastname, account name, password, options (must change passwort at first logon etc.), create a home directory ... Logging is quite easy. If you want I can provide the code I use for similar tasks. FrancescoDiMuro 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
Spikemg1 Posted November 26, 2018 Author Share Posted November 26, 2018 (edited) 17 minutes ago, water said: Let's descibe some basics: The AD UDF uses an API to directly access Active Directory - it doesn't automate a GUI. That's what your mmc does with with the input you provide via the gui. Can you please describe what you want to achieve? I got from the code you posted: create a new user and set firstname, lastname, account name, password, options (must change passwort at first logon etc.), create a home directory ... Logging is quite easy. If you want I can provide the code I use for similar tasks. I think I understand what the UDF is for. Which I am doing away with the mmc bit, after finding out that there is an easier way. When we add new employee's these are all the fields we require for that user to have. So once the user is created it is automatically applies the Principals to the user. Sure that would be nice. My boss wants to have logs of every user added to our system in case of any errors. Also the question about the combo box is for all the OU Locations without having to type it in. Edited November 26, 2018 by Spikemg1 Link to comment Share on other sites More sharing options...
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