Solved

Verifying Group membership and removing users from groups

Posted on 2011-09-30
12
279 Views
Last Modified: 2012-05-12
Hey all,

I am new to VB scripting, so have been bumping around in the dark on this one.  I have a task which i would like to automate with a script. I have a list of users and secutiry groups formatted in a .csv file.  (group1; user1,user2,user3)

For auditing and security purposes, i need to be able to remove any users from the security group whom are not listed in the .csv
I was thinking that i will need to break this down into steps....

Step one:  Verify if users listed in the .csv are members of the security group
Step two:  Compare the actual secutiry group membership to the users listed in the .csv
Step three:  Remove users from the security group if not on the .csv

I already have a script which adds multiple users to different groups in different OU's.  How can i incoperate this second function?

Any help would be greatly appreciated. Thanks
ON ERROR RESUME NEXT

Dim DisplayEcho
Const ADS_PROPERTY_APPEND = 3

'---------------------------------------------------------------------------
'      User Variables
'---------------------------------------------------------------------------
'OU where groups are located
strOU="ou=temp,ou=test,dc=somewhere,dc=com"

'text file groups & users
'line format:  Group Name;User Name1;User Name2;
strTextFilename="C:\Users\laitsvc\Desktop\Test_Scripts\groups.txt"

strLogFileName="C:\Users\laitsvc\Desktop\Test_Scripts\results.txt"

'True to display echos, false to hide
DisplayEcho = True
'---------------------------------------------------------------------------

Set WshShell=CreateObject("Wscript.Shell")
Set fso=CreateObject("Scripting.FileSystemObject")

If DisplayEcho=True then
      'Force CSCRIPT
      If instr(lcase(wscript.fullname),"wscript") then
            wshshell.run "cmd /k cscript //nologo " & chr(34) & wscript.scriptfullname & Chr(34),1,false
            wscript.quit
      End If
End If

Set oLogFile=fso.OpenTextFile(strLogFileName,2,true)

Set oFile=fso.OpenTextFile(strTextFilename,1)
text=oFile.ReadAll
oFile.close

arrText=split(text,vbCrLf)


For each line in arrText
      arrLine=split(line,";")
      strGroup=arrLine(0)
      err.Clear
      strGroupPath=GetADsPath(strGroup,"group")
      
      If strGroupPath = "" then
            Output "ERROR: Could not find group:  " & strGroup
            err.clear
      Else
      		Set objGroup = GetObject(strGroupPath)
            For i = 1 to ubound(arrLine)
                  strUser=arrLine(i)
                  strADsPath_user=GetADsPath(strUser,"user")
                  Set objUser=GetObject(strADsPath_user)
                  strUserDN=objUser.DistinguishedName
                  If strUserDN="" then 
                        Output strGroup & "... Could not find user:  " & strUser
                  Else
                        objGroup.PutEx ADS_PROPERTY_APPEND, _
                              "member", Array(strUserDN)
                        objGroup.SetInfo
            
                        If err.number <> 0 then 
                              If err.number="-2147019886" then
                                    Output strGroup & " <-- " & strUser & " (Already a member)"
                              Else
                                    Output "ERROR adding " & strUser & " to " & strGroup & vbCrLf & _
                                          vbTab & err.number & " " & err.description
                              End If
                              err.clear
                        Else
                              'Uncomment this line to show successful additions
                              'Output strGroup & " <-- " & strUser
                        End If
                  End If
                  strUser=""
                  strUserDN=""
                  strADsPath_user=""
                  Set objUser=Nothing
            Next
            
      End If

      Set objGroup=Nothing
      arrLine=""
      strGroup=""

Next

oLogFile.close

Output ""
Output "Operation complete.  See Log:  " & strLogFileName


Sub Output(txt)
      If DisplayEcho=True then wscript.echo txt
      oLogFile.writeLine txt
End Sub



Function GetADsPath(myName,myType)
      Const ADS_SCOPE_SUBTREE = 2

      strADsPath=""

      Set objRootDSE = GetObject("LDAP://rootDSE")
      strRootDSE = objRootDSE.Get("defaultNamingContext")      

      Set objConnection = CreateObject("ADODB.Connection")
      Set objCommand =   CreateObject("ADODB.Command")
      objConnection.Provider = "ADsDSOObject"
      objConnection.Open "Active Directory Provider"
      Set objCommand.ActiveConnection = objConnection
      
      objCommand.Properties("Page Size") = 1000
      objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
      
      objCommand.CommandText = _
            "SELECT ADsPath FROM 'LDAP://" & strRootDSE & "' WHERE objectCategory='" & myType & "' " & _ 
                  "AND Name ='" & myName & "' "
      
      Set objRecordSet = objCommand.Execute
      
      objRecordSet.MoveFirst
      strADsPath = ""
      strADsPath= objRecordSet.Fields("ADsPath").value

      GetADsPath=strADsPath
      
      Set objConnection=Nothing
      Set objCommand=Nothing
      Set objRecordSet=Nothing
End Function

Open in new window

0
Comment
Question by:MD187
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 4
12 Comments
 
LVL 65

Expert Comment

by:RobSampson
ID: 36899245
Hi, try this.  I haven't tested it, but I've added the bit that begins with
' GO THROUGH THE GROUP MEMBERS AND REMOVE USERS THAT ARE NOT SUPPOSED TO BE IN IT

Regards,

Rob.
ON ERROR RESUME NEXT

Dim DisplayEcho
Const ADS_PROPERTY_APPEND = 3

'---------------------------------------------------------------------------
'      User Variables
'---------------------------------------------------------------------------
'OU where groups are located
strOU="ou=temp,ou=test,dc=somewhere,dc=com"

'text file groups & users
'line format:  Group Name;User Name1;User Name2;
strTextFilename="C:\Users\laitsvc\Desktop\Test_Scripts\groups.txt"

strLogFileName="C:\Users\laitsvc\Desktop\Test_Scripts\results.txt"

'True to display echos, false to hide
DisplayEcho = True
'---------------------------------------------------------------------------

Set WshShell=CreateObject("Wscript.Shell")
Set fso=CreateObject("Scripting.FileSystemObject")

If DisplayEcho=True then
      'Force CSCRIPT
      If instr(lcase(wscript.fullname),"wscript") then
            wshshell.run "cmd /k cscript //nologo " & chr(34) & wscript.scriptfullname & Chr(34),1,false
            wscript.quit
      End If
End If

Set oLogFile=fso.OpenTextFile(strLogFileName,2,true)

Set oFile=fso.OpenTextFile(strTextFilename,1)
text=oFile.ReadAll
oFile.close

arrText=split(text,vbCrLf)


For each line in arrText
      arrLine=split(line,";")
      strGroup=arrLine(0)
      err.Clear
      strGroupPath=GetADsPath(strGroup,"group")
      
      If strGroupPath = "" then
            Output "ERROR: Could not find group:  " & strGroup
            err.clear
      Else
      		Set objGroup = GetObject(strGroupPath)
      		
      		' ADD USERS TO THE GROUP FROM THE CSV FILE
            For i = 1 to ubound(arrLine)
                  strUser=arrLine(i)
                  strADsPath_user=GetADsPath(strUser,"user")
                  Set objUser=GetObject(strADsPath_user)
                  strUserDN=objUser.DistinguishedName
                  If strUserDN="" then 
                        Output strGroup & "... Could not find user:  " & strUser
                  Else
                        objGroup.PutEx ADS_PROPERTY_APPEND, _
                              "member", Array(strUserDN)
                        objGroup.SetInfo
            
                        If err.number <> 0 then 
                              If err.number="-2147019886" then
                                    Output strGroup & " <-- " & strUser & " (Already a member)"
                              Else
                                    Output "ERROR adding " & strUser & " to " & strGroup & vbCrLf & _
                                          vbTab & err.number & " " & err.description
                              End If
                              err.clear
                        Else
                              'Uncomment this line to show successful additions
                              'Output strGroup & " <-- " & strUser
                        End If
                  End If
                  strUser=""
                  strUserDN=""
                  strADsPath_user=""
                  Set objUser=Nothing
            Next
            
            ' GO THROUGH THE GROUP MEMBERS AND REMOVE USERS THAT ARE NOT SUPPOSED TO BE IN IT
            strLine = LCase(line)
            If Left(strLine, 1) <> ";" Then strLine = ";" & strLine
            If Right(strLine, 1) <> ";" Then strLine = strLine & ";"
            For Each objUser In objGroup.Members
            	If InStr(strLine, LCase(";" & objUser.Name & ";") = 0 Then
            		Err.Clear
            		objGroup.Remove "LDAP://" & objUser.distinguishedName
                    If err.number <> 0 Then
                          Output "ERROR removing " & strUser & " from " & strGroup & vbCrLf & _
                                 vbTab & err.number & " " & err.description
                    Else
                          'Uncomment this line to show successful additions
                          Output "Removed " & strUser & " from " & strGroup
                    End If
					Err.Clear
            	End If
            Next
            
      End If

      Set objGroup=Nothing
      arrLine=""
      strGroup=""

Next

oLogFile.close

Output ""
Output "Operation complete.  See Log:  " & strLogFileName


Sub Output(txt)
      If DisplayEcho=True then wscript.echo txt
      oLogFile.writeLine txt
End Sub



Function GetADsPath(myName,myType)
      Const ADS_SCOPE_SUBTREE = 2

      strADsPath=""

      Set objRootDSE = GetObject("LDAP://rootDSE")
      strRootDSE = objRootDSE.Get("defaultNamingContext")      

      Set objConnection = CreateObject("ADODB.Connection")
      Set objCommand =   CreateObject("ADODB.Command")
      objConnection.Provider = "ADsDSOObject"
      objConnection.Open "Active Directory Provider"
      Set objCommand.ActiveConnection = objConnection
      
      objCommand.Properties("Page Size") = 1000
      objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
      
      objCommand.CommandText = _
            "SELECT ADsPath FROM 'LDAP://" & strRootDSE & "' WHERE objectCategory='" & myType & "' " & _ 
                  "AND Name ='" & myName & "' "
      
      Set objRecordSet = objCommand.Execute
      
      objRecordSet.MoveFirst
      strADsPath = ""
      strADsPath= objRecordSet.Fields("ADsPath").value

      GetADsPath=strADsPath
      
      Set objConnection=Nothing
      Set objCommand=Nothing
      Set objRecordSet=Nothing
End Function

Open in new window

0
 

Author Comment

by:MD187
ID: 36903379
Good morning Rob,

Thank you for that.  I ran it, but am getting an error on line 91, char 68

If InStr(strLine, LCase(";" & objUser.Name & ";") = 0 Then
                        Err.Clear
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 36906289
Ooops, I forgot a closing bracket.

Change
If InStr(strLine, LCase(";" & objUser.Name & ";") = 0 Then
to
If InStr(strLine, LCase(";" & objUser.Name & ";")) = 0 Then

Rob.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:MD187
ID: 36906491
Again Rob, awesome.  

Making some headway, but now seems to be removing all existing members from AD Security Groups and not adding the new users on the csv either.  
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 36906649
What is the format of your username in the CSV file?  Is it by name? or login name?
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 36906664
You may need to change
                  If InStr(strLine, LCase(";" & objUser.Name & ";")) = 0 Then

to this
                  If InStr(strLine, LCase(";" & Mid(objUser.Name, 4) & ";")) = 0 Then

I'll see if I can knock up a test.

Rob.
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 36906687
OK,if you have full names, like
GroupName;John Smith;Joe Bloggs

Then this works.

Regards,

Rob.
'MsgBox GetADsPath("Robert Sampson", "user")
'WScript.Quit

ON Error RESUME Next

Dim DisplayEcho
Const ADS_PROPERTY_APPEND = 3

'---------------------------------------------------------------------------
'      User Variables
'---------------------------------------------------------------------------
'OU where groups are located
strOU="ou=temp,ou=test,dc=somewhere,dc=com"

'text file groups & users
'line format:  Group Name;User Name1;User Name2;
strTextFilename="C:\Users\laitsvc\Desktop\Test_Scripts\groups.txt"

strLogFileName="C:\Users\laitsvc\Desktop\Test_Scripts\results.txt"

'True to display echos, false to hide
DisplayEcho = True
'---------------------------------------------------------------------------

Set WshShell=CreateObject("Wscript.Shell")
Set fso=CreateObject("Scripting.FileSystemObject")

If DisplayEcho=True then
      'Force CSCRIPT
      If instr(lcase(wscript.fullname),"wscript") then
            wshshell.run "cmd /k cscript //nologo " & chr(34) & wscript.scriptfullname & Chr(34),1,false
            wscript.quit
      End If
End If

Set oLogFile=fso.OpenTextFile(strLogFileName,2,true)

Set oFile=fso.OpenTextFile(strTextFilename,1)
text=oFile.ReadAll
oFile.close

arrText=split(text,vbCrLf)


For each line in arrText
      arrLine=split(line,";")
      strGroup=arrLine(0)
      err.Clear
      strGroupPath=GetADsPath(strGroup,"group")
      
      If strGroupPath = "" then
            Output "ERROR: Could not find group:  " & strGroup
            err.clear
      Else
      		Set objGroup = GetObject(strGroupPath)
      		
      		' ADD USERS TO THE GROUP FROM THE CSV FILE
            For i = 1 to ubound(arrLine)
                  strUser=arrLine(i)
                  strADsPath_user=GetADsPath(strUser,"user")
                  Set objUser=GetObject(strADsPath_user)
                  strUserDN=objUser.DistinguishedName
                  If strUserDN="" then 
                        Output strGroup & "... Could not find user:  " & strUser
                  Else
                        objGroup.PutEx ADS_PROPERTY_APPEND, _
                              "member", Array(strUserDN)
                        objGroup.SetInfo
            
                        If err.number <> 0 Then 
                              If err.number="-2147019886" then
                                    Output strGroup & " <-- " & strUser & " (Already a member)"
                              Else
                                    Output "ERROR adding " & strUser & " to " & strGroup & vbCrLf & _
                                          vbTab & err.number & " " & err.description
                              End If
                              err.clear
                        Else
                              'Uncomment this line to show successful additions
                              Output strGroup & " <-- " & strUser
                        End If
                  End If
                  strUser=""
                  strUserDN=""
                  strADsPath_user=""
                  Set objUser=Nothing
            Next
            
            ' GO THROUGH THE GROUP MEMBERS AND REMOVE USERS THAT ARE NOT SUPPOSED TO BE IN IT
            strLine = LCase(line)
            If Left(strLine, 1) <> ";" Then strLine = ";" & strLine
            If Right(strLine, 1) <> ";" Then strLine = strLine & ";"
            For Each objUser In objGroup.Members
            	If InStr(strLine, LCase(";" & Mid(objUser.Name, 4) & ";")) = 0 Then
            		Err.Clear
            		objGroup.Remove "LDAP://" & objUser.distinguishedName
                    If err.number <> 0 Then
                          Output "ERROR removing " & strUser & " from " & strGroup & vbCrLf & _
                                 vbTab & err.number & " " & err.description
                    Else
                          'Uncomment this line to show successful additions
                          Output "Removed " & Mid(objUser.Name, 4) & " from " & strGroup
                    End If
					Err.Clear
            	End If
            Next
            
      End If

      Set objGroup=Nothing
      arrLine=""
      strGroup=""

Next

oLogFile.close

Output ""
Output "Operation complete.  See Log:  " & strLogFileName


Sub Output(txt)
      If DisplayEcho=True then wscript.echo txt
      oLogFile.writeLine txt
End Sub



Function GetADsPath(myName,myType)
      Const ADS_SCOPE_SUBTREE = 2

      strADsPath=""

      Set objRootDSE = GetObject("LDAP://rootDSE")
      strRootDSE = objRootDSE.Get("defaultNamingContext")      

      Set objConnection = CreateObject("ADODB.Connection")
      Set objCommand =   CreateObject("ADODB.Command")
      objConnection.Provider = "ADsDSOObject"
      objConnection.Open "Active Directory Provider"
      Set objCommand.ActiveConnection = objConnection
      
      objCommand.Properties("Page Size") = 1000
      objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
      
      objCommand.CommandText = _
            "SELECT ADsPath FROM 'LDAP://" & strRootDSE & "' WHERE objectCategory='" & myType & "' " & _ 
                  "AND Name ='" & myName & "' "
      
      Set objRecordSet = objCommand.Execute
      
      objRecordSet.MoveFirst
      strADsPath = ""
      strADsPath= objRecordSet.Fields("ADsPath").value

      GetADsPath=strADsPath
      
      Set objConnection=Nothing
      Set objCommand=Nothing
      Set objRecordSet=Nothing
End Function

Open in new window

0
 
LVL 65

Expert Comment

by:RobSampson
ID: 36906692
You can delete the first two lines.

Rob.
0
 

Author Comment

by:MD187
ID: 36906758
Hey Rob,

We are using a csv formatted: TestGroup3;TestUsr1;testUsr2;testUsr3;testUsr4;testUsr5;testUsr6
"testUsr(x)" is the login name. The length of each line or number of users is variable.

Running the original script adds users 1-6 to the group.  Then when i run the script with your addition (again, thanks for all the time on this one); i have the csv formatted the same, but without testUsr6:

TestGroup3;TestUsr1;testUsr2;testUsr3;testUsr4;testUsr5

So, testUsr6 should have been removed from TestGroup3... Unfortunately, this is not the case. Can this be modified to recognize userID's rather than full names?

Also,would it be easier to break this down into two different scripts... My original to add the users, and then dissect your piece out and spawn a new script to verify and remove?

Please let me know your thoughts when you can, thanks
0
 
LVL 65

Accepted Solution

by:
RobSampson earned 500 total points
ID: 36906820
That's odd that you login IDs....the GetADsPath function that you have only searches by the "name" attribute, so to add users, you'd need to have full names in the text file.

I'm not sure how it's finding your users, unless the names happens to be the same as the login name.

Anyway, I've added a condition to the GetADsPath function so that if the type being searched for is a group, it searches by name, but if it's looking for a user, it will search by login name.

Regards,

Rob.
ON Error RESUME Next

Dim DisplayEcho
Const ADS_PROPERTY_APPEND = 3

'---------------------------------------------------------------------------
'      User Variables
'---------------------------------------------------------------------------
'OU where groups are located
strOU="ou=temp,ou=test,dc=somewhere,dc=com"

'text file groups & users
'line format:  Group Name;User Name1;User Name2;
strTextFilename="C:\Users\laitsvc\Desktop\Test_Scripts\groups.txt"

strLogFileName="C:\Users\laitsvc\Desktop\Test_Scripts\results.txt"

'True to display echos, false to hide
DisplayEcho = True
'---------------------------------------------------------------------------

Set WshShell=CreateObject("Wscript.Shell")
Set fso=CreateObject("Scripting.FileSystemObject")

If DisplayEcho=True then
      'Force CSCRIPT
      If instr(lcase(wscript.fullname),"wscript") then
            wshshell.run "cmd /k cscript //nologo " & chr(34) & wscript.scriptfullname & Chr(34),1,false
            wscript.quit
      End If
End If

Set oLogFile=fso.OpenTextFile(strLogFileName,2,true)

Set oFile=fso.OpenTextFile(strTextFilename,1)
text=oFile.ReadAll
oFile.close

arrText=split(text,vbCrLf)


For each line in arrText
      arrLine=split(line,";")
      strGroup=arrLine(0)
      err.Clear
      strGroupPath=GetADsPath(strGroup,"group")
      
      If strGroupPath = "" then
            Output "ERROR: Could not find group:  " & strGroup
            err.clear
      Else
      		Set objGroup = GetObject(strGroupPath)
      		
      		' ADD USERS TO THE GROUP FROM THE CSV FILE
            For i = 1 to ubound(arrLine)
                  strUser=arrLine(i)
                  strADsPath_user=GetADsPath(strUser,"user")
                  Set objUser=GetObject(strADsPath_user)
                  strUserDN=objUser.DistinguishedName
                  If strUserDN="" then 
                        Output strGroup & "... Could not find user:  " & strUser
                  Else
                        objGroup.PutEx ADS_PROPERTY_APPEND, _
                              "member", Array(strUserDN)
                        objGroup.SetInfo
            
                        If err.number <> 0 Then 
                              If err.number="-2147019886" then
                                    Output strGroup & " <-- " & strUser & " (Already a member)"
                              Else
                                    Output "ERROR adding " & strUser & " to " & strGroup & vbCrLf & _
                                          vbTab & err.number & " " & err.description
                              End If
                              err.clear
                        Else
                              'Uncomment this line to show successful additions
                              Output strGroup & " <-- " & strUser
                        End If
                  End If
                  strUser=""
                  strUserDN=""
                  strADsPath_user=""
                  Set objUser=Nothing
            Next
            
            ' GO THROUGH THE GROUP MEMBERS AND REMOVE USERS THAT ARE NOT SUPPOSED TO BE IN IT
            strLine = LCase(line)
            If Left(strLine, 1) <> ";" Then strLine = ";" & strLine
            If Right(strLine, 1) <> ";" Then strLine = strLine & ";"
            For Each objUser In objGroup.Members
            	If InStr(strLine, LCase(";" & objUser.samAccountName & ";")) = 0 Then
            		Err.Clear
            		objGroup.Remove "LDAP://" & objUser.distinguishedName
                    If err.number <> 0 Then
                          Output "ERROR removing " & objUser.samAccountName & " from " & strGroup & vbCrLf & _
                                 vbTab & err.number & " " & err.description
                    Else
                          'Uncomment this line to show successful additions
                          Output "Removed " & objUser.samAccountName & " from " & strGroup
                    End If
					Err.Clear
            	End If
            Next
            
      End If

      Set objGroup=Nothing
      arrLine=""
      strGroup=""

Next

oLogFile.close

Output ""
Output "Operation complete.  See Log:  " & strLogFileName


Sub Output(txt)
      If DisplayEcho=True then wscript.echo txt
      oLogFile.writeLine txt
End Sub



Function GetADsPath(myName,myType)
      Const ADS_SCOPE_SUBTREE = 2

      strADsPath=""

      Set objRootDSE = GetObject("LDAP://rootDSE")
      strRootDSE = objRootDSE.Get("defaultNamingContext")      

      Set objConnection = CreateObject("ADODB.Connection")
      Set objCommand =   CreateObject("ADODB.Command")
      objConnection.Provider = "ADsDSOObject"
      objConnection.Open "Active Directory Provider"
      Set objCommand.ActiveConnection = objConnection
      
      objCommand.Properties("Page Size") = 1000
      objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
      
      If LCase(myType) = "group" Then
	      objCommand.CommandText = _
	            "SELECT ADsPath FROM 'LDAP://" & strRootDSE & "' WHERE objectCategory='" & myType & "' " & _ 
	                  "AND Name ='" & myName & "' "
	  ElseIf LCase(myType) = "user" Then
	      objCommand.CommandText = _
	            "SELECT ADsPath FROM 'LDAP://" & strRootDSE & "' WHERE objectCategory='" & myType & "' " & _ 
	                  "AND samAccountName ='" & myName & "' "
	  End If
      
      Set objRecordSet = objCommand.Execute
      
      objRecordSet.MoveFirst
      strADsPath = ""
      strADsPath= objRecordSet.Fields("ADsPath").value

      GetADsPath=strADsPath
      
      Set objConnection=Nothing
      Set objCommand=Nothing
      Set objRecordSet=Nothing
End Function

Open in new window

0
 

Author Closing Comment

by:MD187
ID: 36909986
I would like to start out by thanking Rob for his diligent work on this question. He has definitely earned his status as a genius.  All the effort he has put forth was very much appreciated and very refreshing.

Kudos to you Mr. Sampson
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 36913229
Cheers.  Thanks for the grade, and the comments.  Glad to help out.

Regards,

Rob.
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Well hello again!  Glad to see you've made it this far without giving up.  In this, the fourth installment of my popular series, I'm going to cover functions and subroutines, what they are, and why they are useful.  Just in case you stumbled onto th…
This script will sweep a range of IP addresses (class c only, 255.255.255.0) and report to a log the version of office installed. What it does: 1.)      Creates log file in the directory the script is run from (if it doesn't already exist) 2.)      Sweep…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question