user3241068
user3241068

Reputation: 51

PowerShell v4 Get-Content : A parameter cannot be found that matches parameter name 'Delimiter'

I am hoping someone can give me the push I need to get this done, but I have had no luck with this exact situation online.

I need to use PowerShell (unfortunately I can't use Python or .NET to so this:( ) to parse though a list of files to determine if they contain a line termination of /r rather than /r/n. This script was previously in production and working, when single files were passed.

I am making adjustments so that multiple files can be accommodated.

I am getting the list of filenames and putting them into an array (which is working) but when I tey to loop the files through the if statement I get this error.

Here is my code:

param(
#[Parameter(Mandatory=$True)]
[String]$FileName = "C:\LineTermTest\*C*.txt"
)

$FileNameArray = Get-ChildItem -Path $FileName    | where {!$_.psicontainter }| Select-Object fullname

for ($i=0; $i -le $FileNameArray.Length -1; $i++ )
{
$File = $FileNameArray[$i]


if (Get-Content -path $File -Delimiter "`0" | Select-String "[^`r]`n"   )                                                         


    {
        $content = Get-Content $File
        $content | Set-Content $File -Replace "`n", "'r'n" -Encoding ASCII
        [gc]::collect() 
        [gc]::WaitForPendingFinalizers()
    }
}

and here is the error I get

Get-Content : A parameter cannot be found that matches parameter name 'Delimiter'. At line:13 char:39 + if (Get-Content -path $File -Delimiter <<<< "0" | Select-String "[^r]`n" )
+ CategoryInfo : InvalidArgument: (:) [Get-Content], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

Get-Content : A parameter cannot be found that matches parameter name 'Delimiter'. At line:13 char:39 + if (Get-Content -path $File -Delimiter <<<< "0" | Select-String "[^r]`n" )
+ CategoryInfo : InvalidArgument: (:) [Get-Content], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

Get-Content : A parameter cannot be found that matches parameter name 'Delimiter'. At line:13 char:39 + if (Get-Content -path $File -Delimiter <<<< "0" | Select-String "[^r]`n" )
+ CategoryInfo : InvalidArgument: (:) [Get-Content], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

Upvotes: 1

Views: 5977

Answers (1)

Bert Van Landeghem
Bert Van Landeghem

Reputation: 377

in your script, $File is a 'PSCustomObject', not a FileInfo object, so you need to use its property 'fullname' like this: Get-Content -path $File.fullname -Delimiter "`0". This is because the objects in $FileNameArray are created by using Select-Object.

You can avoid this by leaving out "| Select-Object fullname" when creating $FileNameArray. That way, the $FileNameArray contains FileInfo objects, and Get-Content can use those directly. This is the preferred way.

So this line:

$FileNameArray = Get-ChildItem -Path $FileName    | where {!$_.psicontainter }| Select-Object fullname

becomes this line:

$FileNameArray = Get-ChildItem -Path $FileName    | where {!$_.psicontainter }

Upvotes: 0

Related Questions