Eu só precisava fazer isso funcionar e fiz o seguinte:
$InServerName = 'SomeServerNameorIPAddress'
$InFilePath = '\Sharename\SomePath\'
$InFileName = 'Filename.ext'
$OutServerName = 'SomeServerNameorIPAddress'
$OutFilePath = '\Sharename\SomePath\'
$OutFileName = 'Filename.out'
$InFile = -join('\',$InServerName,$InFilePath,$InFilename)
$OutFile = -join('\',$OutServerName,$OutFilePath,$OutFilename)
$FindStr = 'some string to match on'
$CompareStr = [scriptblock]::Create($FindStr)
$CompareStr
Get-Content $InFile | Where-Object {$_ -notmatch $CompareStr} | Set-Content $OutFile
Get-Content $OutFile
A chave é que o 'Where-Object' usando um bloco de script (como denotado pelas chaves) requer declarar a variável em um evento de criação de bloco de script, daí o
$CompareStr = [scriptblock]::Create($FindStr)
linha.
Ao estruturá-lo dessa maneira, é possível criar uma função, passar uma string de texto para corresponder parcialmente, executar a criação do bloco de script com o valor passado e fazer com que ela funcione corretamente.
As respostas acima não explicam corretamente como passar o valor a ser substituído dentro de uma variável.