Eu usei este código para reproduzir sua situação:
$ADPSSession = New-PSSession -ComputerName 2008r2esxi2
Invoke-Command -Session $ADPSSession -Command { Import-Module ActiveDirectory }
Import-PSSession -Session $ADPSSession -Module ActiveDirectory -Prefix RM
Então eu queria tentar um argumento string -Filter, tentei isso e recebi um erro:
$LocalSam = 'joakimbs'
$x = Get-RMADUser -Filter "SamAccountName -eq $LocalSam" -Properties *
Error parsing query: 'SamAccountName -eq joakimbs' Error Message: 'syntax error' at position: '20'.
+ CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException
Depois, lembrei-me recentemente de encontrar a sintaxe especial que os cmdlets do AD usam tanto com strings quanto com "blocos de script" (aparentemente, eles não são tratados como blocos de script reais).
Caso seja de interesse (eu acho que é mais limpo que [ScriptBlock] :: Create ()), eu adicionei aspas simples ao redor da variável, e então funciona:
$x = Get-RMADUser -Filter "SamAccountName -eq '$LocalSam'" -Properties *
$x.DistinguishedName
CN=joakimbs,CN=Users,DC=svendsen,DC=local
Espero não estar quebrando nenhuma regra (de novo). Estou respondendo a pergunta, mas principalmente para suplementar informações para futuros leitores. Eu deveria ter feito um comentário?
Eu sinto que devo mencionar que o material [char] 34 é desnecessário. Você poderia apenas dobrar as aspas duplas para ter aspas duplas literais dentro de uma cadeia entre aspas duplas, ou escapar da aspas duplas usando o caractere de escape do PowerShell, um backtick (').
O uso de um bloco de script ainda permite que você pule o char cast (um bloco de script que não é tratado totalmente como eu o entendo, mas ainda aceito como um tipo para o parâmetro -Filter).
Parece ser explicado em este artigo da Microsoft .
Aqui está um exemplo do uso de aspas simples em vez de [char] 34 com [scriptblock] :: Create ().
$SB = [ScriptBlock]::Create("SamAccountName -eq '$LocalSam'")
$SB.ToString()
SamAccountName -eq 'joakimbs'
$x = Get-RMADUser -Filter $SB -Properties *
$x.DistinguishedName
CN=joakimbs,CN=Users,DC=svendsen,DC=local
[char] 34
"
Espero que isso seja útil para alguém.