Seu exemplo de código salva o valor na metabase, mas salva no objeto raiz (w3svc / 1) em vez do vdir raiz (w3svc / 1 / root).
Veja o que funcionará no lugar do que você tem:
$website = Get-WmiObject -Class IIsWebServerSetting -Namespace "root\microsoftiisv2" -ComputerName $computerName -filter "ServerComment = '$websiteName'" -Authentication 6
$path = $website.name + '/root'
$vdir = [wmi]"root\MicrosoftIISv2:IIsWebVirtualDirSetting='$path'"
$headers = $vdir.HttpCustomHeaders
$headers[0].Keyname = 'P3P: policyref="http://somewebsite.com/p3p.xml", CP="IDC DSP COR CUR DEV PSA IVA IVD CONo HIS TELo OUR DEL UNRo BUS UNI"'
$headers[0].Value = $null
$vdir.HttpCustomHeaders = $headers
$vdir.Put()
No entanto, mais uma coisa a observar é que isso substitui o primeiro valor em vez de adicionar um novo valor. Estou sem tempo hoje para descobrir como lidar com meu limitado conhecimento em PowerShell, mas vai ser algo como:
$bindingClass = [wmiclass]'root\MicrosoftIISv2:HttpCustomHeader'
$newheader = $bindingClass.CreateInstance()
$newheader.KeyName = "New Value"
$newheader.Value = $null
$headers += $header
Há um erro de transmissão, por isso não está certo, mas espero que isso o direcione na direção certa.