'***************************************************************************************************************
'*                                    INTEL DISCLOSURE And COPYRIGHT INFORMATION                              '*
'*                                                                                                            '*  
'*                THIS DOCUMENT AND ALL INFORMATION PROVIDED HEREIN, INCLUDING CODE, IS PROVIDED              '*  
'*                "AS IS" WITH NO WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY,           '*
'*                NONINFRINGEMENT, FITNESS FOR ANY PARTICULAR PURPOSE, OR ANY WARRANTY OTHERWISE              '* 
'*                ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE.                                       '*
'*                Intel disclaims all liability, including liability for infringement of any proprietary      '*
'*                rights, relating to use of information or code in this document.   Recipient may use        '*
'*                this document and all information herein, including code, but all such use is and shall     '*
'*                be at recipient's sole risk and subject to the disclaimers and limitations of liability     '*
'*                herein.  No other license, express or implied, by estoppel or otherwise, to any             '*  
'*                intellectual property rights is granted herein.                                             '*  
'*                Copyright (c) Intel Corporation 2008. *Third-party brands and names are                     '*  
'*                the property of their respective owners.                                                    '*  
                                                                                                       
'***************************************************************************************************************

' File              :    Team_ModifyTeamInfo.VBS
' Version           :     1.0
'
'  Purpose :   Used to change the team information 
'                   
'
'  Arguments : Team_ModifyTeamInfo.vbs <TeamIndex SettingName SettingValue> [target username password] [help]
'
'               <TeamIndex>    - Index of the team to enumerate member adapters
'               <SettingName>     - Teaming mode or Caption
'               <SettingValue>    - new value for the TeamingMode or Caption 
'               <remote>       - the name of a remote computer; requires the following:
'               <username>     - user name
'               <password>     - password
'
'
'  Instructions for use:
'  =====================
'  1) Execute script by invoking "cscript Team_ModifyTeamInfo.vbs" from the command line with arguments listed above
'  2) The common script library vbslib.vbs must be located in the same directory
'
'***************************************************************************************************************

   Option Explicit
     On Error Resume Next
     Include "VBSLIB.vbs"
   
     Const SCRIPT_NAME = "Team_ModifyTeamInfo.vbs"
     Const SCRIPT_DESCRIPTION = "Used to change the team information"

    'Global variables
     Dim TeamIndex, InternalTeamIndex
     Dim SettingName, SettingValue
     Dim Target, Username, Password
     Dim sResult
     Dim WbemServices
     Dim Adapters
     Dim sError
     Dim sReturn
         
     'Check command line is correct
     If ParseCommandLine(TeamIndex,SettingName,SettingValue,Target, Username, Password) = false then 
          PrintScriptHelp
          Wscript.Quit 0
     End if

     
     'Connect
     If WMIConnect(WbemServices, "root\Intelncs2", Target, Username, Password, sError) = false then
          Wscript.Echo "Failed to connect to WMI namespace. " & VbNewLine
          wscript.echo "Make sure Intel(R) Network Connections software is installed."
          Wscript.Quit 0
     End if    
     
     ' Enumerate teams
     dim TeamList
     TeamList = EnumerateTeams(WbemServices, sResult)

     ' Check that there are teams on the system
     if IsNothing(TeamList)then
          wscript.Echo "No teams found on the system."
          wscript.quit 0
     end if
     
     InternalTeamIndex = CInt(TeamIndex) - 1

     ' Verify the team specified is a valid index, bail if not
     if (InternalTeamIndex < 0) then
          wscript.echo "Invalid team index. Team index must be greater than 0"
          wscript.quit 0
     elseif (InternalTeamIndex > ubound(TeamList)) then
          wscript.echo "Team index not found: " & InternalTeamIndex
          wscript.quit 0
     end if

     ' Display the team
      wscript.Echo Cstr(TeamIndex) & ") " & TeamList(InternalTeamIndex).Caption & " Settings:" & VbNewLine

     ' Call the modifyTeamInfo from the Library script     
    dim ret : ret = ModifyTeamInfo (WbemServices, TeamList(InternalTeamIndex), SettingName, SettingValue, sReturn)                         

    if ret = true then
               if Len(sReturn) > 0 then
                   wscript.echo sReturn
               else
                   wscript.echo "   Successfully set setting: " & SettingName 
               end if
    else
               wscript.echo "   " & sReturn 
    end if
       
     
    wscript.Quit 0
          

     
'===================================================
'  Function : ParseCommandLine
'   Purpose : Evaluates command line arguments passed to the script and determines if they are correct
' Arguments : 
'
'             TeamIndex - Index of the team to use
'             SettingName - Setting for which new value has to be added
'             SettingValue - New value that needs to be changed to
'             Target - the machine which will receive the request
'             UserName - the user name passed in the command line
'             Password - the password passed in the command line
'   Returns : True (if the command line has the correct format), False otherwise
'   Notes   : User name can be in the form of either a user name or a Domain\Username
'===================================================
     Function ParseCommandLine (byref TeamIndex,byref SettingName,byref SettingValue, byref Target, byref Username, byref Password)
     
          Err.Clear
          On Error Resume Next
          
          'Capture command line arguments
          dim cmd_args : set cmd_args = wscript.Arguments
                  
          'Examine number of arguments
          Select Case cmd_args.count
               Case 1 
                    ' if the only command line arg is 'help' return false so the script help will be displayed
                    If instr(LCase(cmd_args(0)), "help") > 0 Then
                         ParseCommandLine = false
                         Exit Function
                    End If   
               Case 3
                 ' Check if the first arg (index #) is not a number or if sClass/sPropertyName is and bail
                  if not IsNumeric(cmd_args(0)) then
                           ParseCommandLine = false
                           exit function
                  end if
                  
                     'Verify the if the modification is to be done for teamingmode or caption only 
                if LCase(cmd_args(1)) <> "caption" AND LCase(cmd_args(1)) <> "teamingmode" then
                      ParseCommandLine = false
                 exit function
                end if
                
                'if the modification is for TeamingMode, then verify the given value for the mode is a valid one.
    
                 if LCase(cmd_args(1)) = "teamingmode" then
                      'check to verify the settingvalue is valid
                      if not IsNumeric(cmd_args(2)) then
                                If UCASE(cmd_args(2)) = "AFT" Then
                                   SettingValue = 0
                                Elseif UCASE(cmd_args(2)) = "ALB" Then
                                   SettingValue = 1
                                Elseif UCASE(cmd_args(2)) = "SLA" Then
                                   SettingValue = 2
                                Elseif UCASE(cmd_args(2)) = "8023AD" Then
                                   SettingValue = 4
                                Elseif UCASE(cmd_args(2)) = "SFT" Then
                                   SettingValue = 5
                                else
                        ParseCommandLine = false
                           exit function
                     end if
                           else
                             if cmd_args(2) <> 0 and cmd_args(2) <> 1 and cmd_args(2) <> 2 and cmd_args(2) <> 3 and cmd_args(2) <> 4 and cmd_args(2) <> 5 then
                                  ParseCommandLine = false
                                  exit function
                             end if
                           end if
                      end if
               
                           TeamIndex = CInt(cmd_args(0))
                           SettingName = cmd_args(1)
                      Target = "."
                      UserName = ""
                      Password = ""
                      ParseCommandLine = true
                      Exit Function  
               Case 6
                    ' Check if the first arg (index #) is not a number or if sClass/sPropertyName is and bail
                    if not IsNumeric(cmd_args(0)) then
                         ParseCommandLine = false
                         exit function
                   end if
                   
                   'Verify the if the modification is to be done for teamingmode or caption only 
     
                    if LCase(cmd_args(1)) <> "caption" and LCase(cmd_args(1)) <> "teamingmode" then
                          ParseCommandLine = false
                     exit function
                    end if
                    
                    'if the modification is for TeamingMode, then verify the given value for the mode is a valid one.
        
                    if LCase(cmd_args(1)) = "teamingmode" then
                           'check to verify the settingvalue is valid
                           if not IsNumeric(cmd_args(2)) then
                                If UCASE(cmd_args(2)) = "AFT" Then
                                   SettingValue = 0
                                Elseif UCASE(cmd_args(2)) = "ALB" Then
                                   SettingValue = 1
                                Elseif UCASE(cmd_args(2)) = "SLA" Then
                                   SettingValue = 2
                                Elseif UCASE(cmd_args(2)) = "8023AD" Then
                                   SettingValue = 4
                                Elseif UCASE(cmd_args(2)) = "SFT" Then
                                   SettingValue = 5
                                else
                                   ParseCommandLine = false
                                   exit function
                                end if
                           else
                              if cmd_args(2) <> 0 and cmd_args(2) <> 1 and cmd_args(2) <> 2 and cmd_args(2) <> 3 and cmd_args(2) <> 4 and cmd_args(2) <> 5 then
                                   ParseCommandLine = false
                                   exit function
                              end if
                           end if
                    else 
                         SettingValue = cmd_args(2)
                    end if
                     
                    TeamIndex = CInt(cmd_args(0))
                    SettingName = cmd_args(1)
                    Target = cmd_args(3)
                    UserName = cmd_args(4)
                    Password = cmd_args(5)
                    ParseCommandLine = true
                    Exit Function  
          End Select

          ParseCommandLine = false
          
     End Function
     
               
          
     '===================================================
     '       Sub : PrintScriptHelp
     '   Purpose : Prints command line help for the user
     '             on how to use this script
     '===================================================
     Sub PrintScriptHelp
     
          Wscript.Echo "Usage :" & VbNewLine & VbNewLine &_ 
                         "  " & SCRIPT_NAME & " <TeamIndex SettingName SettingValue> [target username password] [help]" & VbNewLine & VbNewLine &_
                         "  Required: " & VbNewLine & VbNewLine &_
                         "    " & TeamIndexString & VbNewLine &_
                         "                   " & TeamGetIndexString & VbNewLine & VbNewLine &_
                         "    " & SettingNameString  &_
                         "                   Valid Setting Name : 'Caption' or 'TeamingMode' " & VbNewLine &VBNewLine &_
                         "    " & SettingValueString &_
                         "                   Valid TeamingModes: ALB, AFT, SLA, 8023AD, SFT" & VbNewLine & VbNewLine &_
                          OptionalCmdLineArgsString
     End Sub
     
     
     
     
' DO NOT REMOVE THIS FUNCTION
Function Include(vbsFile)

     Dim fso, ts, buf, path
     Set fso = CreateObject("Scripting.FileSystemObject")

     path = fso.GetParentFolderName (WScript.ScriptFullName) & "\" & vbsFile

     If fso.FileExists(path) Then  
          set ts = fso.OpenTextFile(path)
          buf = ts.ReadAll()
          ts.Close()
          Executeglobal buf
     Else
          Wscript.Echo "Unable to open include file: " & path
          Wscript.Quit 0
     End If

End function
