PrimalForms/PowerShell – Event Behavior: Tab Key or Enter Key

In this article I wanted to expand on the previous post (http://itnotes.net/2011/01/03/primalformspowershell-event-behavior-enter-key-and-active-directory-lookup/) …

Which captured the Event Behavior: KeyPress which was used to trigger an action after the Enter Key was pressed.

During a project to allow our admins to change the manager field in our AD LDS Identity Store I was coding a Textbox to be triggered with the tab key, but low and behold they TAB key is not captured by default by the KeyDown, KeyPress or KeyUp Events.

Per the Microsoft Articles:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keyup.aspx

Certain keys, such as the TAB, RETURN, ESC, and arrow keys are handled by controls automatically. To have these keys raise the KeyDown event, you must override the IsInputKey method in each control on your form. The code for the override of the IsInputKey would need to determine if one of the special keys is pressed and return a value of true. Instead of overriding the IsInputKey method, you can handle the PreviewKeyDown event and set the IsInputKey property to true.

Note the IsInputKey method must be set per control, so there is no need to turn it back off for other controls on the same form.

So in this example I start with a basic form with two labels, two textboxes, and a status bar to show when the TAB or ENTER keys are captured.

For the Event Behaivior: PreviewKeyDown for $textbox1 I setup the following code:

$textbox1_PreviewKeyDown=[System.Windows.Forms.PreviewKeyDownEventHandler]{
     #Event Argument: $_ = [System.Windows.Forms.PreviewKeyDownEventArgs]
     $_.IsInputKey = $true
}

For the Event Behaivor: KeyDown for $textbox1 I setup the following code:

$textbox1_KeyDown=[System.Windows.Forms.KeyEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.KeyEventArgs]
      If ($_.KeyValue -eq 9) {
           $statusbar1.Text = “Tab key was pressed”
           $textbox2.Focus()
           $textbox2.Clear()
     }
     Else {$statusbar1.Text = $_.KeyValue}
}

Notes:

     1. I used the KeyDown event because the KeyPress event is not raised by noncharacter keys; however, the noncharacter keys do raise the KeyDown and KeyUp events.

     2. I use $textbox2.Focus() to move to the next control because the TAB key is no longer coded to complete that default action.

Set $textbox1 Events to the previous code sets.

To show the different between the two examples I coded $textbox2 Event Behavior: KeyPress to capture the ENTER key

$textbox2_KeyPress=[System.Windows.Forms.KeyPressEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.KeyPressEventArgs]
      If ($_.KeyChar -eq 13) {
           $statusbar1.Text = “Enter Key was pressed”
           $textbox1.Focus()
           $textbox1.Clear()
     }
}

Set $textbox2 to the previous code set.

As you may have noticed in the Event to capture the TAB key we used KeyValue and in the Event to capture the ENTER key we used KeyChar.

KeyCode, KeyData or KeyValue must be used because KeyChar cannot capture the following Keys

The TAB key.

INSERT and DELETE.

HOME.

END.

PAGE UP and PAGE DOWN.

F1-F2.

ALT.

Arrow keys.

For more details about the differences between KeyCode, KeyData, and KeyValue:

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.keycode.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.keydata.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.keyvalue.aspx

In my next post I would like to show examples of how to use KeyChar to to control the field format of a textbox used for items like ZipCode or Telephone Numbers.

~ITNotes

PowerShell – Multiple (-and) (-or) within a single If statement

I had a hard time finding examples on the web on how or if you could code multiple If’s into a single If statement, so I thought I would just quick post up an example once I figured out how to do it. Perhaps I wasn’t looking in the right places but all the examples I saw were just a single (-and) or (-or) in the code.

So based on being able to code an If statement in either of the following fashions:

If ($someAttribute -eq $false -or $someAttribute -eq $Null){

}

or the following:

If (($someAttribute -eq $false) -or ($someAttribute -eq $Null)){

}

Then we should be able to do a combined effort:

If (($someAttribute -eq $false -or $someAttribute -eq $Null) -and ($someUser -eq “UserID123”)){
       Write-Host “Switching to True”
       Set-QADUser $someUser -Service “MyDomain.org” -ObjectAttributes @{$someAttribute = $True}
       If (!$?) {Write-Host “Error: $($error[0])”}
}

So if $someAttribute is either $false or $Null AND #someUser equalsUserID123″ then do something… in this case I switch the Attribute someAttribute to $true and do some error checking.

~ITNotes

PrimalForms/PowerShell – Event Behavior: Enter Key and Active Directory Lookup

The next event behavior I wanted to cover was hitting a Enter Key within a textbox control and have it trigger another event.

In this examble I have three basic controls a textbox,a button and a listbox.  I am using the textbox as a Search Textbox, after entering text to search the end user can either press Enter or the ‘find’ button.

First add the Event Handler for the Textbox to response only to the Enterkey.

Next add the Event Handler to search Active Directory using the text from the TextBox($txbFind) after the button($btnFind) is single clicked.

Next the code for handler_button1_Click. First the Event handler clears the listbox ($lstResults) then it searches Active Directory with the text from the Textbox ($txbFind). Then if the results if not null, the handler will list the results in the listbox($lstResults)

$handler_btnFind_Click={
$lstResults.Items.Clear()
$Users = get-qaduser $txbFind.text -service ‘MyDomain.edu’ -sizelimit 0 -includedproperties displayName | Sort displayName | select displayName
 if ($Users -ne $Null) {
  foreach ($User in $Users){
   $lstResults.Items.add($User.displayName)
  }
 }
}

Lastly we add code to the Event handler for the textbox to trigger the button($btnFind) when the Enter Key is pressed and give focus to the listbox($lstResults).

$handler_txbFind_KeyPress=[System.Windows.Forms.KeyPressEventHandler]{
If ($_.KeyChar -eq 13){
 $btnFind.PerformClick()
 $lstResults.Focus()
}
}

The results show the matching users in the listbox

Using this code I created an admin tool that modifys anything from address to exchange administration. Happy Coding!

PrimalForms/PowerShell – Event Behavior: Button Click and Switch Tab

I decided that I would post how to code a few Event Behaviors that could be coded with PowerShell using PrimalForms. You could just use your basic PowerShell Editor but PrimalForms is just my tool of choice.

So I start with a basic form (Two Tabs and a Button)

Then on the Events tab of $button1, double click ‘click’

Add the following code to the Event handler:

 $handler_button1_Click={
#TODO: Place custom script here
     If ($tabpage1.Visible -eq $true) {
          $tabcontrol1.SelectTab(‘tabpage2’)
     }
     ElseIf ($tabpage2.Visible -eq $true) {
           $tabcontrol1.SelectTab(‘tabpage1’)
     }
}

Clicking the button switches from tab to tab. Way cool!

Glimspe of the PrimalForms 2011 and PrimalScript 2011 Release?

I have been waiting impatiently for the release of PrimalForms 2011, my current project requires multi-form support so the sooner I can get my hands on this the better.

Today I found the product pages for PrimalForms 2011 and PrimalScript 2011. Neither product is listed under their current product list.

PrimalForms 2011: http://www.primaltools.com/products/primalforms2011.asp

PrimalScript 2011 http://www.primaltools.com/products/primalscript2011.asp

Active Directory Federation Services (ADFS) 2.0 RTW Released!

The rumors that ADFS 2.0 would be released today were true. Microsoft released Active Directory Federation Services (ADFS) 2.0 RTW today. I know RTM is Released To Manufacturing so does RTW mean Released to World?

Download ASFS 2.0
http://technet.microsoft.com/en-us/evalcenter/ee476597.aspx
OR
http://www.microsoft.com/downloads/details.aspx?FamilyID=118c3588-9070-426a-b655-6cec0a92c10b&displayLang=en

Additional Resources

Active Directory Federation Services (AD FS) 2.0
http://technet.microsoft.com/en-us/library/adfs2(WS.10).aspx

AD FS 2.0 Step-by-Step and How To Guides
http://technet.microsoft.com/en-us/library/dd727938(WS.10).aspx

Introducing AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-help-introducing(WS.10).aspx

AD FS 2.0 Terminology
http://technet.microsoft.com/en-us/library/adfs2-help-terminology(WS.10).aspx

Using Windows PowerShell for AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-help-using-windows-powershell(WS.10).aspx

Web Resources for AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-help-web-resources(WS.10).aspx

How To…
http://technet.microsoft.com/en-us/library/adfs2-help-how-to(WS.10).aspx

~ITNotes

Active Directory Federation Services (ADFS) 2.0 Release 5.5.2010?

There have been rumors floating around that ADFS 2.0 would be released today. As I was stumbling around Technet today I ran across the articles that were updated 5-5-2010. Perhaps the rumors are true, we will soon see. Keep you eyes peeled for a update from Team Geneva’s blog.

Active Directory Federation Services (AD FS) 2.0
http://technet.microsoft.com/en-us/library/adfs2(WS.10).aspx

AD FS 2.0 Step-by-Step and How To Guides
http://technet.microsoft.com/en-us/library/dd727938(WS.10).aspx

Introducing AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-help-introducing(WS.10).aspx

AD FS 2.0 Terminology
http://technet.microsoft.com/en-us/library/adfs2-help-terminology(WS.10).aspx

Using Windows PowerShell for AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-help-using-windows-powershell(WS.10).aspx

Web Resources for AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-help-web-resources(WS.10).aspx

How To…
http://technet.microsoft.com/en-us/library/adfs2-help-how-to(WS.10).aspx

and many more all dated 5-5-2010

~ITNotes

TEC 2010 – Advanced Training on Microsoft Active Directory and FIM

Today I registered for TEC 2010 which will be in Los Angeles this year. I have never attended TEC before but last year I was right down the road at TechED. I am still waiting to hear if I will be attending TechEd 2010 as well.

I am excited to see some focus around Active Directory and Forefront Identity Manager at a conference especially since Forefront Identity Manager was just released to manufacturing. One of my fears in attending this conference this year was that FIM would be released after TEC 2010 and covered in greater detail at TechED 2010, now with the release of FIM I hope that is not the case. I have already seen some vendors providing extensions to FIM so this may be the best year to go to TEC so far.

I definitely will be posting some more information and pictures during the event. Feel free to email me with any suggestions around the conference or questions you would like to be asked. ITNotes@gmail.com

~ITNotes

PowerShell – ProperCase Function

Change any case to Proper Case (‘ITNOTES DoT net’ to ‘Itnotes Dot Net’):
This is very useful for us during scripted user creations when the usernames and such from the source were in random cases. This script could also be useful with auto user provisioning with ILM/FIM 2010 from another datasource, we were using a VBScript that is much longer.

This script basically converts everything to lowercase then capitalizes the first letter of each word.

function ToProperCase ([String]$in)
{
 $in = $in.Tolower()
 $textInfo = [System.Threading.Thread]::CurrentThread.CurrentCulture.TextInfo  
 return $textInfo.ToTitleCase($in)
}

Example of use:
$Title = “ITNOTE DOT NET”
ToProperCase($Title)

Returns:
Itnotes Dot Net

Complete Script

function ToProperCase ([String]$in){
 $in = $in.Tolower()
 $textInfo = [System.Threading.Thread]::CurrentThread.CurrentCulture.TextInfo
 return $textInfo.ToTitleCase($in)
}
$Title = “ITNOTE DOT NET”
ToProperCase($Title)

As noted by Lee, here is a oneliner contributed by Jonathan Noble at http://www.jonoble.com/. Thanks Lee.

(Get-Culture).TextInfo.ToTitleCase(“THIS IS MY STRING”.ToLower())

I am always in favor of shorter scripts nevertheless I also favor functions, so here is a much shorter function:

function ToProperCase ([String]$in){
return (Get-Culture).TextInfo.ToTitleCase($in.ToLower())
}

New Role – Active Directory / Identity Management Engineer

I was recently promoted to our company’s Security Team as an Active Directory / Identity Management Engineer. So most of my future posts will be aimed towards those technologies and Group Policy. I will also continue to post some hopefully helpful VBScripts and PowerShell Scripts. I still have a few draft posts that I plan to publish eventually that maybe helpful in the Windows Installer and Packaging Space however no new findings will be posted in this expertise.

Thanks for reading!

~ITNotes