Hi @Kenneth ,
Invoke-Command is a native commandlet to run your commands over WinRM (Windows Remote Management). It works over the WinRM protocol through port 5595 by default. https://learn.microsoft.com/en-us/windows/win32/winrm/installation-and-configuration-for-windows-remote-management
Invoke-AzVMRunCommand is an Azure-based commandlet, it's native for Azure and it's required to have Azure Agent (https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/agent-windows) on this machine (by default, standard Azure VM machines have it) because it works through the agent, not WinRM.
Now, summarizing the above, if you plan to invoke your powershell scripts on-premises or in another clouds in the same network - WinRM is a more universal approach (invoke-command). But if you don't want to open WinRM ports or your workloads will be hosted in Azure only, Invoke-AzVMRunCommand could be better. Decision is on your hands.
@Kenneth , if you create a new session every execution, invoke-command should be faster. But if you run the same scripts in one session - there is no difference from performance perspective.