'***************************************************************************************************************
'*                                    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_ValidateAddAdapter.VBS
' Version           :     1.0
'
'  Purpose :   Used to check if any adapter not part of the existing team can be added to a team
'                   
'
'  Arguments : Team_ValidateAddAdapter.vbs <AdapterIndex TeamIndex>[target username password] [help]
'
'               <TeamIndex>    - Team index to check against
'               <AdapterIndex> - Adapter index to be added to the team
'               <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_ValidateAddAdapter.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_ValidateAddAdapter.vbs"
     Const SCRIPT_DESCRIPTION = "Used to check if any adapter not part of the existing team can be added to a team"

     'Global variables
     Dim Target, Username, Password
     Dim WbemServices
     Dim sError
     
     Dim AdapterIndex, InternalAdapterIndex
     Dim TeamIndex, InternalTeamIndex
     Dim sResult
     Dim AdapterSet
     
     
     'Check command line is correct
     If ParseCommandLine(AdapterIndex, TeamIndex, 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. " & sError
          Wscript.Quit 0
     End if

      ' get the adapter instance and check if it is a valid adapter instance
          set AdapterSet = new cAdapters
          
          'Enumerate adapters using the Wbem handle obtained above 
          If AdapterSet.Enumerate (WbemServices, sError) = False Then
               Wscript.Echo "Failed to enumerate adapters. " & sError
               Wscript.Quit 0
          End If     
          
          InternalAdapterIndex = AdapterIndex - 1
          
          ' Verify the adapter specified is a valid index, bail if not
          if (InternalAdapterIndex < 0) then
               wscript.echo "Invalid adapter index. Adapter index must be greater than 0"
               wscript.quit 0
          elseif (InternalAdapterIndex >= AdapterSet.AdapterCount) then
               wscript.echo "Adapter index not found: " & AdapterIndex
               wscript.quit 0
          end if
          
               ' Get the specified adapter instance
          dim adapter : set adapter = AdapterSet.GetAdapterInstance(InternalAdapterIndex)
     
          ' Make sure we got an adapter back
          if IsNothing(adapter) then
               wscript.echo "Failed to get adapter instance"
               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 = 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: " & TeamIndex
		  wscript.quit 0
          end if
        
          wscript.Echo Cstr(AdapterIndex) & ") " & adapter.Name & VbNewLine
       
       dim ValidateResult 
       ValidateResult = ValidateAddAdapterToTeam(WbemServices, adapter, TeamList(InternalTeamIndex), sResult)
           
       'Check to make sure that something was returned
       if ValidateResult = true then
            wscript.echo "   Adapter can be added to " & TeamList(InternalTeamIndex).Caption
       else
            wscript.echo "   " & sResult
       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 check the specified adapter against
'               AdapterIndex  - Index of the adapter to check for team compatibility 
'               sTarget       - the name of a remote computer
'               sUserName     - the user name for remote auThentication
'               sPassword     - the password for remote auThentication
'
' 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\argUserName
'                    'Help' will return false - the script does not need to do anything else
'===================================================
Function ParseCommandLine (byref AdapterIndex, byref TeamIndex, byref sTarget, byref sUserName, byref sPassword)

     Err.Clear
     On Error Resume Next
     
     'Capture command line arguments
     Dim cmd_args : Set cmd_args = wscript.Arguments
     
     'Check number of command line arguments and exit If it is not correct
     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 2
                         if not IsNumeric(cmd_args(0)) then
                             ParseCommandLine = false
                             Exit Function
                         end if
                         
                         if not IsNumeric(cmd_args(1)) then
                             ParseCommandLine = false
                             Exit Function
                         end if
                         
                         AdapterIndex = CInt(cmd_args(0))
                         TeamIndex = CInt(cmd_args(1))
                         sTarget = "."
                         sUserName = ""
                         sPassword = ""
                         ParseCommandLine = true
                         exit function
                    Case 5
                         if not IsNumeric(cmd_args(0)) then
                             ParseCommandLine = false
                             Exit Function
                         end if
                         
                         if not IsNumeric(cmd_args(1)) then
                             ParseCommandLine = false
                             Exit Function
                         end if
                         
                         AdapterIndex = CInt(cmd_args(0))
                         TeamIndex = CInt(cmd_args(1))
                         sTarget = cmd_args(2)
                         sUserName = cmd_args(3)
                         sPassword = cmd_args(4)
                         ParseCommandLine = true
                         Exit Function  
          End Select
     
     'Return failure
     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 & " <AdapterIndex TeamIndex> [target username password] [help]" & VbNewLine & VbNewLine &_
                             "  Required: " & VbNewLine &_
                             "    " & AdapterIndexString & VbNewLine &_
                             "                   " & AdapterGetIndexString & VbNewLine & VbNewLine &_
                             "    " & TeamIndexString & VbNewLine &_
                             "                   " & TeamGetIndexString & 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
