def get_principal_name(graph_object):
        """Attempts to resolve a principal name.
        :param graph_object: the Azure AD Graph Object
        :return: The resolved value or an empty string if unsuccessful.
        """
        if hasattr(graph_object, 'user_principal_name'):
            return graph_object.user_principal_name
        elif hasattr(graph_object, 'service_principal_names'):
            return graph_object.service_principal_names[0]
        elif hasattr(graph_object, 'display_name'):
            return graph_object.display_name
        return ''