PowerShell интерпретирует -$($Type)
как строковый аргумент, а не имя параметра. Используйте splatting для условной передачи таких параметров:
$extraParams = @{ $Type = $true }
New-Mailbox -Name "$($Resource)" @extraParams
Я не уверен, какие другие типы почтовых ящиков доступны в Exchange Online, но вы, вероятно, захотите выяснить это и применить некоторую проверку ввода:
param(
[string]$Resource,
[ValidateSet('Equipment','Person','Room')]
[string]$Type
)
# do other stuff here
# If someone passed a wrong kind of `$Type`, the script would have already thrown an error
$extraParams = @{ $Type = $true }
New-Mailbox -Name "$($Resource)" @extraParams