satish kumar
satish kumar

Reputation: 453

How to remove Microsoft.PowerShell.Core\FileSystem::\\ from path

i am comparing to folders with all their subfolders with powershell and its working fine on my local machine. but when i tried it on server its give me error and append

Microsoft.PowerShell.Core\FileSystem::\\

to all the files

if any one have do such work earlier please help

my script is

$Path = '\\Server1\Folder1'

Get-ChildItem $Path -Recurse | ? { !$_.PSIsContainer } | % { 
        Add-Member -InputObject $_ -MemberType NoteProperty -Name RelativePath -Value $_.FullName.Substring($Path)
        $_
    }

and its give me error

Cannot convert argument "0", with value: "Microsoft.PowerShell.Core\FileSystem::\\Server1\Folder1\ServerListPowershell", for "Substring" to type "System.Int32": "Cannot convert value "M
icrosoft.PowerShell.Core\FileSystem::\\Server1\Folder1\ServerListPowershell" to type "System.Int32". Error: "Input string was not in a correct format.""
At C:\Users\cwr.satish.kumar\AppData\Local\Temp\898f72f1-a0d3-4003-b268-128c5efc9f2b.ps1:14 char:108
+         Add-Member -InputObject $_ -MemberType NoteProperty -Name RelativePath -Value $_.FullName.Substring <<<< ($Path)
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

please help

Upvotes: 16

Views: 22765

Answers (3)

Andrei Suslov
Andrei Suslov

Reputation: 83

You could use the Substring() as well. For example:

$path = "Microsoft.PowerShell.Core\FileSystem::\\SERVERNAME\HOSTNAME\FOLDER"
$result = $path.Substring($path.IndexOf("FileSystem::") + 12)
Write-Output $result # Output: "\\SERVERNAME\HOSTNAME\FOLDER"

Upvotes: 0

Shay Levy
Shay Levy

Reputation: 126732

Try the Convert-Path cmdlet:

PS> Convert-Path Microsoft.PowerShell.Core\FileSystem::C:\windows\system32
C:\windows\system32

Upvotes: 33

zdan
zdan

Reputation: 29450

I am not sure why the FullName property is prepending the powershell provider to the name, that's usually what you get when in the PsPath property.

At any rate, the reason why your attempt to strip it is failing is because your are passing a String to the SubString member function when it expects an integer index. To get the index of the start of your path, use the IndexOf member function:

$justThePath = $_.FullName.SubString($_.FullName.IndexOf($Path))

Upvotes: 3

Related Questions