Switch controllers aren’t supported outside of switch development AFAIK. To support that you need to be approved by Nintendo at the moment.
The others are fairly recognizable, consider this InputActionAsset:

And this code:
using UnityEngine;
using UnityEngine.InputSystem;
public class Test : MonoBehaviour
{
[SerializeField]
private InputActionAsset inputActionAsset;
private void Awake()
{
inputActionAsset.Enable();
inputActionAsset.FindAction("TestAction").performed += DoTestAction;
}
private void OnDestroy() => inputActionAsset.FindAction("TestAction").performed -= DoTestAction;
// ctx.action.activeControl.device.
// name: Keyboard, Mouse, XInputControllerWindows, DualShock4GamepadHID
// displayName: Keyboard, Mouse, XBox Controller, Wireless Controller
// description: Mouse (RawInput), Keyboard (RawInput),
// {"userIndex":0,"type":1,"subType":1,"fla... (XInput),
// Sony Interactive Entertainment Wireless Controller (HID)
private static void DoTestAction(InputAction.CallbackContext ctx) =>
Debug.Log(ctx.action.activeControl.device.name);
}
This part is the results:
ctx.action.activeControl.device.name: Keyboard, Mouse, XInputControllerWindows, DualShock4GamepadHID
ctx.action.activeControl.device.displayName: Keyboard, Mouse, XBox Controller, Wireless Controller
ctx.action.activeControl.device.description: Mouse (RawInput), Keyboard (RawInput), {"userIndex":0,"type":1,"subType":1,"fla... (XInput), Sony Interactive Entertainment Wireless Controller (HID)
Now, I only have my generic Mouse, Keyboard, a wireless XBox controller and a wireless PS4 controller, so I could only test on those. It seems to me that if you want to compare and recognize devices, the name property is your best bet, if you want to display it to users, then the displayName.