Microsoft – Outlook – Disabled Adds-In

Background

Things are always fun in support land.

One of our end users is not able to see one of the Adds-In we have.  There were no error messages; the only way we knew is that the Add-Ins were not visible in Microsoft Outlook.

We re-installed the Application many times, but no help.

 

Outlook -Add-In

Accessed Outlook Adds-In and here is what we see:

AddInDisabled

 

 

 

Trouble Shooting

Disclaimer

As always, I am not at liberty to discuss too much specifics about the specific Outlook plugin that we were having problems with.

Thankfully without going too far off track, we have a Piñata and we will use that in its place.

 

Simplified Path

Let us review our Outlook Add-Ins:

  • Launch Outlook if not already active
  • Access Menu option File \ Options
  • From the left bar, select the Add-Ins link

 

Disabled-AddIn

 

On the right panel:

  • The Add-Ins are listed
  • Please pay attention to the Inactive and Disabled Add-ins

 

Remediate

To re-mediate:

  • From the right bottom pane, in the manage drop-down, select “Disabled Items”
  • Click the “Go” button

 

Disabled Items - Manage

 

Here are the disabled items:

DisabledItems

 

Iterate through the disabled items, select the ones you are interested in enabling, and click on the enable button.

 

Re-mediate – Registry

In cases where the GUI does not work well, access the registry and rename the Resiliency\DisabledItems branch

  • Launch regedit
  • Depending on the version of Outlook, transverse to the corresponding branch
    • In our case, “HKCU\Software\Microsoft\Office\14.0\Outlook\Resiliency\DisabledItems
  • Rename the key
    • In our case, we renamed “HKCU\Software\Microsoft\Office\14.0\Outlook\Resiliency\DisabledItems” to “HKCU\Software\Microsoft\Office\14.0\Outlook\Resiliency\DisabledItems.bak.20150305″

 

Additional Resources

Microsoft is a Software Shop.  And, in truth, they have developers writing “one off” utilities all the time.

Here are some diagnostic tools that can further your insight:

 

Outlook Product Stability Diagnostic

When one tries out the “Outlook Product Stability Diagnostics”, one notice this security Alert.

 

MicrosoftOutlookSecurityAlert

 

Obviously the alert is to inform us that a 3rd party app is trying to access Outlook’s email registry.

One more proof that Microsoft might be silent about Security traps, but they are not as muted as those disengaged from day to day affairs might want to believe.

 

Messiah Ben Joseph

Background

This is a subject that I will rather not touch, but it is an interesting one that has very low YouTube hits.

 

Introduction

Chris White

There is a relatively straight to the point Christian that I found on YouTube.  He has an interesting take on the Rapture.  He believes in something called Prewrath Rapture.  Here are some links:

 

He cites Charles Cooper, a former lecturer of “Homiletics and Hermeneutics” at Moody Bible Institute.  I will let you seek out Charles work via YouTube on your own.

Back to Chris, sometimes this last week or so, I found a couple of more relatively original thoughts.

In the Ben Joseph video he speaks to how the major Abrahamic religions all await a messiah or a set of messiahs.  He proposes that Judaism await Messiah Ben David and Messiah Ben Joseph.

 

Messiah Ben Joseph

So who is this figure “Messiah Ben Joseph”?  Glad you asked.

Here are some commentaries:

 

SharePoint Document Library and Bulk Check In

Background

For a web site that we are working on, a  lot of pictures are being taken.  Somehow some of the architectural diagrams came in as Adobe PDF files.  Our standard is JPEG and so I need to convert the PDF files to JPEG.

 

Map Locally

Personally, it is easier for me to work with SharePoint documents via MS Explorer as compared to working with same in a browser.

And, so connected to our SharePoint using IE and followed the button bar icons ( Library Tools \ Library \ Open with Explorer).

OpenWithExplorer

 

 

Once Windows Explorer comes up, noted the URL.

And, here we are mapping a previously un-used local drive to that URL.


net use t: "https://sharepoint/sites/ProjectTeam/HighFashion/Jubilee"

 

Conversion

I have both Adobe Acrobat and Fox IT Readers installed on my machine.  And, I tried opening up the PDF files and saving them as JPEG using both readers, but “NO GO”.

As I talked to myself and obviously stumbled, Rao said that I should just you Adobe Professional.

I checked our Software Library and we indeed have it.  But, I really do not want Capital A1 to have to pay for more stuff.

And, so went online and downloaded a trial copy of Adobe Acrobat XI Pro.

Adobe Acrobat XI Pro

Thanks goodness Adobe Acrobat seamlessly recognized that I had mapped a virtual drive to a SharePoint document library.  I like the integration piece of it asking whether to check the file out.  I obliged.

Once the file is availed in Acrobat XI Pro, I simply had to save the file as an Image; in our case JPEG.

SaveAsOtherRefined

Other supported formats includes the Microsoft Office Suite; MS Word, Excel, and PowerPoint.

 

I repeated the above sequence – checked files out and converted them by saving as JPEG for a quite a few files.

 

SharePoint – Document Library

As I started wrapping up, I remembered that I had chosen to check-out the files.

In all truth, as I was performing the save with new file names, and so I really ought to  have  retrieved the files without checking them out.

In our SharePoint v2010, our steps will be:

  • Select the file
  • Right click on the selected file
  • And, from the drop-down menu, choose “Send To”/”Download a copy”
  • Specify where the file should be saved and confirm the file’s name

But, again, I was in a rush and chose the default choice of checking out the original files and so here I am with a need to check them back in.

As I browsed SharePoint’s Document Library Interface, I was lost as to how to identify which files I had checked out.

Fumbled again.  And, finally settled on creating a view.

 

View

The idea will be to create a view that as part of the file details includes the “Check Out” User.

And, will that level of detailed information, I hoped that I will be able to more readily identify which files I had checked-out.

 

View Definition

Here is the View we created.  You can see that we have included the “Checked Out To” column.

Columns

viewCheckedOutTo

 

Filter

We set our filter as :

  • Column :- “Checked Out To”
  • Operation :- Is not equal to
  • Value :- empty

view-filter-CheckedOutTo

 

Bulk-Check Steps

  • Created the view
  • Chose to display using the view
  • Ordered View by “Checked Out To”
  • Selected my files
  • Chose to check them in or (in our case “
  • Discard Check Out“)

 

CheckIn And Discared Check Out

 

 

Addendum

Identify Checked-Out files

Later in the day, as I continued working in SharePoint, I could now tell that SharePoint visually tags checked-out files.

Here is a screen shot:

checkedOutFilesTaggingRefined

The files that are checked-out have the green arrow; as in checkedOutTag

One more reason why I no longer work at home, on my bed, and much prefer the bigger screen and more ergonomic posture at work,

Like the AT&T Commercial, More is Better.  In our case the bigger screen and standing up in front of a computer is better.

 

 

 

Mining Application Logs – 2015/Feb

Background

A few days a 3rd party web Application that I am working on started getting this error message:

PleaseSelectACity

 

Diagnostic Steps

Vendor

Spoke to the onsite Vendor Support person and he blamed it on customization we are doing on our side.

And, so again, we are on our own.

As the Application is Microsoft; .Net, Classic ASP, C#, and Classic ASP, I am on safe grounds.

Launched Command Shell

Launched Command Shell and changed folder to application’s Inetpub folder.

Find Text

Tool

While one can use GUI tools to search, I personally find the built-in Windows Search tool hard to navigate.  And, so we will use findstr for our exercise.

For our current needs, here are the relevant parameters:

Argument Description  Usage
 /m Prints only the file name if a file contains a match. This allows us to print out matches and not worry about their contextual usage in corresponding file
 /p Skips files with non-printable characters. In our case, we have exes and dlls.  These are binary files and their contents is not available via normal textual parsing means nor editors.And, so for now we will skip them.
 /s Searches for matching files in the current directory and all sub-directories. Delve into sub-folders \ sub-directories, as well.
 /c Uses specified text as a literal search string. Findstr supports both literal and regular expression (RE) searches.In our case, we will edge towards literal as it is a bit simpler and we will avoid the relative complexity of RE; especially as we do not need it for our current simple need.

 

 

 

Let us use findstr to look for the text.

   findstr /p /s /c:"Please select a city"

 

Output

Textual:


   _translate\english.inc:t5078 = "Please select a country"
   _translate\englishus.inc:t5078 = "Please select a country"

 

pleaseSelectACountry

 

Match ID

From the matches above, we appear to be dealing with an App that has a bit of Internationalization.  That is, it supports various languages through IDs and “culture” specific resource files.

This time, I do not want to print out the specific matching lines, just the actual file names.

   findstr /M /p /s /c:"t5078" *.* | more

 

Output

Textual:


   GridCache\js\jQuery.VC.js
   GridCache\js\jQuery.VC.min.js
   FuncLinks\metaAdmin.asp
   _translate\dutch.inc
   _translate\english.inc
   _translate\englishus.inc
   _translate\french.inc
   _translate\german.inc
   _translate\hungarian.inc
   _translate\indonesian.inc
   _translate\italian.inc
   _translate\norwegian.inc
   _translate\portuguese.inc
   _translate\portuguesebr.inc
   _translate\spanish.inc
   _translate\swedish.inc

 

Review HTML\jQuery File

In the GridCache\js\jQuery.VC.js file, we find matches for t5078 and t5079.

 


     var cz = 0;
	e.find("#selCountry option:selected").each(function() {
		if (cz == 0) {
			cz = b(this).attr("value")
		}

	if (cz <= 0) {
		alert(getTextValue("t5078"));
		e.find("#selCountry").focus();
		return
	}

	var y = 0;
	e.find("#selRegion option:selected").each(function() {
		if (y == 0) {
			y = b(this).attr("value")
		}
	});
	if (y <= 0) {
		alert(getTextValue("t5079"));
		e.find("#selRegion").focus();
		return
	}

 

 

Review ASP File

Next was to review some of the Server-side ASP files:

                     

  <strong><%= t1 %>:</strong>
  <span id="summary_location">
    <% if isArray(arr_locationDetails) and int_serviceOnly = 0 then response.write arr_locationDetails(1,0) end if %>
  </span>

 

Invoke Stored Procedure

Let us invoked our Stored Procedure and pass in the arguments we are most interested in.

  

  set oRS_getForm = server.createObject("ADODB.recordset")
  oRS_getForm.CursorLocation = 3


  on error resume next

  oRS_getForm.open "{call dbo.sp_displayForm ("&userDefinedLocation&", "&int_roomID&","&Session("LanguageID")&", "&Session("UserID")&", "&userDefinedBusinessUnit&", "&Session("countryID")&", "&int_bookingID&", '"&userDefinedFloor&"', "&session("filterGrid")&", "&int_managedBooking&", "& int_editSeries&", '"& dt_currentDateAndTime &"', "&session("outlook")&", "&int_serviceOnly&", "&int_deliveryPoint&")}", oConn

  set colErrs = oConn.Errors

  if oConn.Errors.Count <> 0 then 

    response.Write t1499
    For Each objError In colErrs 
        call logErrorData(objError.Number, objError.Description, "Form", "sp_displayForm")
    Next
    oConn.Errors.Clear
    oConn.close
    set oConn = nothing
    response.end

 end if

 

Retrieve Database Record Set

In the code below, we can see that on the third getRows we bring back the recordset that we are most interested in (arr_locationDetails).

                     

 if oRS_getForm.recordcount <> 0 then arr_userDetails = oRS_getForm.getRows() end if
 set oRS_getForm = oRS_getForm.nextRecordset()

 if oRS_getForm.recordcount <> 0 then arr_siteSetup = oRS_getForm.getRows() end if
 set oRS_getForm = oRS_getForm.nextRecordset()

 if oRS_getForm.recordcount <> 0 then arr_locationDetails = oRS_getForm.getRows() end if
 set oRS_getForm = oRS_getForm.nextRecordset()

 if oRS_getForm.recordcount <> 0 then arr_resourceNamingDetails = oRS_getForm.getRows() end if
 set oRS_getForm = oRS_getForm.nextRecordset()

 if oRS_getForm.recordcount <> 0 then arr_colours = oRS_getForm.getRows() end if
 set oRS_getForm = oRS_getForm.nextRecordset()

 if oRS_getForm.recordcount <> 0 then arr_messages = oRS_getForm.getRows() end if

 

Stored Procedure Code

Get Location & Business Unit


   SELECT 
           l.pkLocationID, l.LocationName, l.fkCountryID, isNull(l.att, 0), isNull(CostCentreMandatory, 1) AS CostCentreMandatory    
         , l.fkRegionID as regionID ,l.CCPaymentCostCodeEnabled CCPaymentCostCodeEnabled 
  FROM dbo.tblLocationBusinessUnit lbu     
        INNER JOIN dbo.tblLocation l 
         ON l.pkLocationID = lbu.fkLocationID    
  WHERE fkBusinessUnitID = @businessUnit    
  

 

Database Error Log

We went through some more files and finally reviewed the Application’s Error Log Tables.

 


set nocount on
go

set dateformat dmy
go

declare @dateCutoff datetime
declare @VENDOR_TAG varchar(60)

set @VENDOR_TAG = 'BR'
set @dateCutoff = '19/3/2015'

declare @errorListIgnore TABLE
(
    [errorDescription] varchar(60)
)

declare @errorListInclude TABLE
(
    [errorDescription] varchar(60)
)

insert into @errorListIgnore
([errorDescription])
values
      ('Invalid')
    , ('GridCache:InsertCache')
    , ('Cache removed reason: Removed')
    , ('found file')
    , ('Host')

insert into @errorListInclude
([errorDescription])
values
      ('Sequence contains no elements')

select top 1500
          'using ignore list' as 1
        , replace(tblCE.errorNumber, @VENDOR_TAG, '') as [errorNumber]
        , errorDescription
        , replace(tblCE.[filename], @VENDOR_TAG, '') as [filename]
        , errorDescription
        , storedProcedure
        , replace(tblCE.datetime, @VENDOR_TAG, '') as [datetime]
from   dbo.tblBRError tblCE
where  errorDescription not in ( select tblL.[errorDescription] from @errorListIgnore tblL)
and    [datetime] < @dateCutoff
order by pkErrorID desc

select top 1500
          'using include list' as 1
        , replace(tblCE.errorNumber, @VENDOR_TAG, '') as [errorNumber]
        , errorDescription
        , replace(tblCE.[filename], @VENDOR_TAG, '') as [filename]
        , errorDescription
        , storedProcedure
        , replace(tblCE.datetime, @VENDOR_TAG, '') as [datetime]
from   dbo.tblBRError tblCE
where  errorDescription in ( select tblL.[errorDescription] from @errorListInclude tblL)
and    [datetime] < @dateCutoff
order by pkErrorID desc

 

Thank goodness for Application’s Logging, we found entries such as:

 

Textual:

Error Entries
   at RNM..DAL.User.UserDAL.GetUserdefaultSettingsDB(Int32 userID)
at RNM..DAL.User.UserDAL.GetUserDefaultSettingsByID(Int32 userID)
at RNM..BLL.User.UserBLL.GetUserDefaultSettingsByID(Int32 userID)
  at RNM..Utilities.ExceptionManager.HandleException(Exception hExp, String dataToLog, Boolean throwException)
at RNM..BLL.User.UserBLL.GetUserDefaultSettingsByID(Int32 userID)
at RNM..BLL.User.UserBLL.GetUserDefaultSettingsByResourceID(Int32 userID, EnumResource resource)
 Timezone name not found

 

 

 Image:

errorTable

 

Fixes

There are a couple of Database support tables that are pertinent to us.

  • dbo.tblBusinessUnit
  • dbo.tblLocationBusinessUnit
  • dbo.tblLocation
  • dbo.tblUserdefaultView

Summary

I have intentionally obfuscated error messages and simplified our problem solving passageway for several reasons:

  • The Application is only used by a few companies
  • The Vendor does not have a broad support web site
  • I am too old to have the Vendor close some of our tool-sets and have to rely on them ever more; or worse still resort to more rudimentary techniques

 

Listening

It has been a taxing week.  And, so I have to listen and share

Patrick Anthony – No Pretense (Official Music Video)
https://www.youtube.com/watch?v=7g4_6Y_gCqw

Transact SQL – The Time of Scaler Functions Problems

Background

It is easy to create little performance potholes in SQL.  Let us review one such path.

Environment

Create table

Let us create a table.

 


set noexec off
go

use [DBLab]
go

if schema_id('functionScaler') is null
begin

	exec('create schema [functionScaler] authorization [dbo]')

end
go

if object_id('[functionScaler].[String]') is not null
begin

	drop table [functionScaler].[String];

end
go

if object_id('[functionScaler].[String]') is not null
begin

	set noexec on

end
go

create table [functionScaler].[String]
(

	  [int]    int          not null identity(1,1)

	, [value]  varchar(600) not null

	, constraint PK_FUNCTION_SCALER__STRING
		primary key
			(
				[value]
			)

)

set noexec off
go

 

 

Create DDL – Table Value Function

Let us look for isNumeric Inline table value function.

Jeff Moden has a good name within the SQL Community and we will use his.

 


set noexec off
go

use [DBLab]
go

if object_id('dbo.IsAllDigits') is not null
begin

	set noexec on
end
go

CREATE FUNCTION dbo.IsAllDigits
/********************************************************************
 Purpose:
 This function will return a 1 if the string parameter contains only
 numeric digits and will return a 0 in all other cases.  Use it in
 a FROM clause along with CROSS APPLY when used against a table.

 --Jeff Moden
********************************************************************/
--===== Declare the I/O parameters
        (@MyString VARCHAR(8000))
RETURNS TABLE AS
 RETURN (
         SELECT CASE
                WHEN @MyString NOT LIKE '%[^0-9]%'
                THEN 1
                ELSE 0
                END AS IsAllDigits
        )
go

set noexec off
go

 

Add Data

 


set nocount on
go

use [DBLab]
go

truncate table [functionScaler].[String]
go

insert into [functionScaler].[String]
([value])
select char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
go 100000
;

insert into [functionScaler].[String]
([value])
select 112
go
;

 

 

Performance Review

 

Query – Base

Let us query our table.

We will initially use a straight forward isNumeric system function.

And, then Mr. Moden’s Inline table value function.

 


set statistics time off
set statistics io on
set nocount on
go

use [DBLab]
go

declare @value_as_int int
declare @value_as_bit bit

set @value_as_int = 1
set @value_as_bit = 1

select [value]
from  [functionScaler].[String] tblS
where isNumeric(tblS.[value]) = 1

print '-------------------------------------------------------------'

select [value]

from   [functionScaler].[String] tblS

		cross apply dbo.IsAllDigits(tblS.[value]) tblID

where tblID.IsAllDigits = 1

  Query Execution Plan:

isNumericCheck-System-and-inlineTableValueFunction
Statistics I/O

statisticsIO

 

Explanation:

  • Both queries pay the price of an Index Scan
  • Also, both queries have identical logical reads of 566

 

Can we attain better performance?

Can we get better performance?

Ideas that come to mind includes:

  • Try to replace the isNumeric scaler function with an Inline Table Value Function.  We have already tried that, but it does not seem to help
  • Shall we try CLR.  Presumably, Microsoft wrote isNumeric in C++ and it is not clear that, C# CLR will offer better performance

 

Index

We all know that indexes usually help.

But, unlike Oracle, Microsoft does not allow us to directly index functions.  And, so we will create a persisted computed column and index that.

 


use [DBLab]
go

/*
	Add computed column and corresponding index
*/
declare @bCreateComputedColumn bit

set @bCreateComputedColumn = 1

if (@bCreateComputedColumn = 1)
begin

	print 'Create Computed Column valueIsNumeric'

	if not exists
		(

			select *
			from   sys.columns tblSC
			where  tblSC.object_id = object_id('[functionScaler].[String]')
			and    tblSC.[name] = 'valueIsNumeric'
		)
		begin

			print 'Create Computed Column (valueIsNumeric) ...'

			-- alter table [functionScaler].[String] drop column valueIsNumeric
			alter table [functionScaler].[String]
				add [valueIsNumeric]
					as isNumeric([value]) persisted

			print 'Create Index idx_valueIsNumeric ...'

			-- drop index [functionScaler].[String].idx_valueIsNumeric
			create index idx_valueIsNumeric
			on [functionScaler].[String]
			( [valueIsNumeric] )
			include
			(
				[value]
			)

		end
	else
	begin

		print 'Computed Column valueIsNumeric Exists'

	end

	print 'Create Computed Column valueIsNumeric_AsBit_UsingCast'

	if not exists
		(

			select *
			from   sys.columns tblSC
			where  tblSC.object_id = object_id('[functionScaler].[String]')
			and    tblSC.[name] = 'valueIsNumeric_AsBit_UsingCast'
		)
		begin

			print 'Create Computed Column (valueIsNumeric_AsBit) ...'

			-- alter table [functionScaler].[String] drop column valueIsNumeric
			alter table [functionScaler].[String]
				add [valueIsNumeric_AsBit_UsingCast]
					as cast(isNumeric([value]) as bit) persisted

			print 'Create Index idx_valueIsNumericAsBit_UsingCast ...'

			-- drop index [functionScaler].[String].idx_valueIsNumeric_AsBit
			create index idx_valueIsNumeric_AsBit_UsingCast
			on [functionScaler].[String]
			( [valueIsNumeric_AsBit_UsingCast] )
			include
			(
				[value]
			)

		end
	else
	begin

		print 'Computed Column Exist valueIsNumeric_AsBit_UsingCast'

	end

end

go

Review Performance

 


use [DBLab]
go

set statistics time off
set statistics io on
set nocount on
go

print ''
print '-------------------------------------------------------------'
print 'Query IsNumeric = 1 (index = PK_FUNCTION_SCALER__STRING)'

select [value]
from  [functionScaler].[String] tblS with (index = PK_FUNCTION_SCALER__STRING)
where isNumeric(tblS.[value]) = 1

print ''
print '-------------------------------------------------------------'
print 'Query IsNumeric = 1'

select [value]
from  [functionScaler].[String] tblS
where isNumeric(tblS.[value]) = 1

/*

select [value]

from   [functionScaler].[String] tblS

		cross apply dbo.IsAllDigits(tblS.[value]) tblID

where tblID.IsAllDigits = 1

--------------------------------------------------------------------

*/

print ''
print '-------------------------------------------------------------'
print 'Query [valueIsNumeric] - value - int'

select [value]

from   [functionScaler].[String] tblS

where tblS.[valueIsNumeric] = 1

print ''
print '-------------------------------------------------------------'
print 'Query [valueIsNumeric_AsBit] - value - int'

select [value]

from   [functionScaler].[String] tblS

where tblS.[valueIsNumeric_AsBit_UsingCast] = 1

print ''
print '-------------------------------------------------------------'
print 'Query [valueIsNumeric_AsBit] - value - bit'

select [value]

from   [functionScaler].[String] tblS

where tblS.[valueIsNumeric_AsBit_UsingCast] = cast(1 as bit)

--------------------------------------------------------------------

We get surprising performance implications once we added the function indexes.

Let us quickly review our findings.

Query Index % Scan Count / Logical Reads
 1 Clustered Index Scan  98% Scan count 1, logical reads 651
 2 Index Seek – idx_valueIsNumeric_AsBit  1% Scan count 1, logical reads 3
 3 Index Seek – idx_valueIsNumeric_AsBit  1% Scan count 1, logical reads 3
 4 Index Scan – idx_valueIsNumeric_AsBit  1% Scan count 1, logical reads 3
 5 Index Scan – idx_valueIsNumeric_AsBit  1% Scan count 1, logical reads 3

 

 

Explanation:

We can clearly see that queries 2 and 5 are quite a bit better than our original scenario where we did not have a ‘backing” index for isNumeric clause

 

Source Control

GitHub

As it is a Git World, Tracking @ https://github.com/DanielAdeniji/TransactSQLScalerFunctionPerf

 

Summary

In summary, be careful about adding little helper\utility functions to your SQL code; as they can cause table scans.

There are certain design decisions that can result in needing determination functions such as isDate, isNumeric, etc.

Those design decisions include using the same column to hold different datatypes.

The resultant SQL DML Statements also often need OR Statements.  And, that often lead to much greater Scan Counts.

Additionally Information is needed to connect …

 

Warning

When I come in each morning and occasionally through the day, I get the message pasted below:

 

Image:

additionalInformationIsNeededToConnect_v2

 

Text:

Additionally Information is needed to connect ….

 

Troubleshooting

Review Network Connections

  • Access Control Panel \ Network and Internet \ Network Connections

Our display looks like this:

AttemptingToAuthenticate

On the Wireless Network Connection, we can see the message “Attempting to authenticate”.

 

Review Wireless Networks

  • Access Control Panel \ Network and Internet \ Manage Wireless Networks
  • Select the Wireless Network (that we are being prompted to connect to )
  • Review the Network

 

Manage Wireless Networks

maangeWirelessNetworks

 

 

 

Wireless Network Properties – Connection

wirelessNetworkProperties-Before

 

Wireless Network Properties – Security

wirelessNetworkProperties-Security

 

Problem Identification

The problem is the we are currently setup to auto connect to the Wireless Network.

As background, systems continually poll to see whether automatically configured Networks are nearby.

And, of course, it is once I come to work and dock my laptop each morning.

The auto-connect will happen in most cases.  But, in our case, we are setup with two-factor authentication; smart card and pin.

And, that is the source of the message “Additional Information is needed ….”

 

Remediation

Un-check “Connect automatically when this network is in range”.

 

wirelessNetworkProperties-After