I have a file called Eric Clapton - Nothing But The Blues - Full Concert (1994) [HQ].URL
in a directory C:\Hans\Hans4\
.
Code to create this is below (though the error occurs regardless of file contents)
$fileContents = @"
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://example.com/
IDList=
"@
New-Item -Path "C:\Hans\Hans4" `
-Name "Eric Clapton - Nothing But The Blues - Full Concert (1994) [HQ].URL" `
-ItemType "file" `
-Value $fileContents `
-Force
When I run the following I get an error
Get-ChildItem 'C:\Hans' -Recurse | Resolve-ShortcutFile > Output.txt
The code references the function below
function Resolve-ShortcutFile {
param(
[Parameter(
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position = 0)]
[Alias("FullName")]
[string]$fileName
)
process {
if ($fileName -like "*.url") {
Get-Content $fileName | Where-Object {
$_ -like "url=*"
} |
Select-Object @{
Name='ShortcutFile'
Expression = {Get-Item $fileName}
}, @{
Name='Url'
Expression = {$_.Substring($_.IndexOf("=") + 1 )}
}
}
}
}
This is the error message
Get-Content : An object at the specified path C:\Hans\Hans4\Eric Clapton - Nothing But The Blues - Full Concert (1994) [HQ].URL does not exist, or has been filtered by the -Include or -Exclude parameter. At line:33 char:28 + Get-Content $fileName | Where-Object { + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (System.String[]:String[]) [Get-Content], Exception + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetContentCommand
Why do I get this error?
An error in PowerShell is a message that's displayed on screen when something goes wrong. By default, PowerShell displays its errors in red text on a black background (in the console host, that is; the Integrated Scripting Environment (ISE) uses red text).
The problem is the filename that is piped into the function and passed to Get-Content
C:\Hans\Hans4\Eric Clapton - Nothing But The Blues - Full Concert (1994) [HQ].URL
You are encountering the problem described here.
It contains square brackets that are interpreted as a range operator with the set H and Q
So the pattern would mean that it attempts to read the contents of files with either of the following names...
... but will not match the literal [HQ]
in
You can use the -literalPath
parameter to avoid this problem and have the file name treated literally.
function Resolve-ShortcutFile {
param(
[Parameter(
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position = 0)]
[Alias("FullName")]
[string]$fileName
)
process {
if ($fileName -like "*.url") {
Get-Content -literalPath $fileName | Where-Object {
$_ -like "url=*"
} |
Select-Object @{
Name='ShortcutFile'
Expression = {Get-Item -literalPath $fileName}
}, @{
Name='Url'
Expression = {$_.Substring($_.IndexOf("=") + 1 )}
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With