I guess you are missing the braces{}
for your scriptblock
in your Where-Object
cmdlet. Also the -notlike
operator uses wildcard for search operation.
Get-ChildItem "\\localhost\c$" -Directory -force -Exclude $generalExclude -erroraction 'silentlycontinue' | Where-Object {$_.Attributes.ToString() -NotLike "*ReparsePoint*"}
As per the msdn document for the Where-Object
cmdlet, you will see there are two ways to construct a Where-Object command.
Method 1
Script block.
You can use a script block to specify the property name, a comparison
operator, and a property value. Where-Object returns all objects for
which the script block statement is true.
For example, the following command gets processes in the Normal
priority class, that is, processes where the value of the
PriorityClass property equals Normal.
Get-Process | Where-Object {$_.PriorityClass -eq "Normal"}
Method 2
Comparison statement.
You can also write a comparison statement, which is much more like
natural language. Comparison statements were introduced in Windows
PowerShell 3.0.
For example, the following commands also get processes that have a
priority class of Normal. These commands are equivalent and can be
used interchangeably.
Get-Process | Where-Object -Property PriorityClass -eq -Value "Normal"
Get-Process | Where-Object PriorityClass -eq "Normal"
Additional Info -
Starting in Windows PowerShell 3.0, Where-Object adds comparison
operators as parameters in a Where-Object command. Unless specified,
all operators are case-insensitive. Prior to Windows PowerShell 3.0,
the comparison operators in the Windows PowerShell language could be
used only in script blocks.
In your case, you are constructing the Where-Object
as a scriptblock
and hence braces{}
become a necessary evil. Alternatively, you can construct your Where-Object
in the following ways -
Get-ChildItem "\\localhost\c$" -Directory -force -Exclude $generalExclude -erroraction 'silentlycontinue' | Where-Object Attributes -NotLike "*ReparsePoint*"
(OR)
Get-ChildItem "\\localhost\c$" -Directory -force -Exclude $generalExclude -erroraction 'silentlycontinue' | Where-Object -property Attributes -NotLike -value "*ReparsePoint*"