<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def get_counters(counter_list):
    '''
    Get the values for the passes list of counters

    Args:
        counter_list (list):
            A list of counters to lookup

    Returns:
        dict: A dictionary of counters and their values
    '''
    if not isinstance(counter_list, list):
        raise CommandExecutionError('counter_list must be a list of tuples')

    try:
        # Start a Query instances
        query = win32pdh.OpenQuery()

        # Build the counters
        counters = build_counter_list(counter_list)

        # Add counters to the Query
        for counter in counters:
            counter.add_to_query(query)

        # https://docs.microsoft.com/en-us/windows/desktop/perfctrs/collecting-performance-data
        win32pdh.CollectQueryData(query)
        # The sleep here is required for counters that require more than 1
        # reading
        time.sleep(1)
        win32pdh.CollectQueryData(query)
        ret = {}

        for counter in counters:
            try:
                ret.update({counter.path: counter.value()})
            except pywintypes.error as exc:
                if exc.strerror == 'No data to return.':
                    # Some counters are not active and will throw an error if
                    # there is no data to return
                    continue
                else:
                    raise

    finally:
        win32pdh.CloseQuery(query)

    return ret