docs: 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 ''