I have recently started using more tags, and I often need to find VMs with multiple tags.
I’ve been using this method, which has worked so far.
$tag1 = Get-Tag -Category "Cat1" -Name "Tagname1"
$tag2 = Get-Tag -Category "Cat2" -Name "Tagname2"
$tag3 = Get-Tag -Category "Cat3" -Name "Tagname3"
$vm1 = Get-VM -Tag $tag1
$vm2 = Get-VM -Tag $tag2
$vm3 = Get-VM -Tag $tag3
$vm_result = $vm1 | Where-Object {$vm2 -Contains $_} | Where-Object {$vm3 -Contains $_}
$vm_result
Also check this for another option – https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Get-VM-List-based-on-Multiple-Tags/td-p/2893873