15

私は、PowerShellを使用してすべてのサブフォルダーを含むフォルダーと比較しており、ローカルマシンで正常に動作しています。しかし、私がサーバーでそれを試したとき、それは私にエラーを与えて追加します

Microsoft.PowerShell.Core\FileSystem::\\

すべてのファイルに

誰かが以前にそのような仕事をしたことがあるなら、助けてください

私のスクリプトは

$Path = '\\Server1\Folder1'

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

そしてそれは私にエラーを与えます

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

助けてください

4

2 に答える 2

29

Convert-Pathコマンドレットを試してください。

PS> Convert-Path Microsoft.PowerShell.Core\FileSystem::C:\windows\system32
C:\windows\system32
于 2013-02-01T21:02:24.810 に答える
3

FullNameプロパティが名前の前にPowerShellプロバイダーを追加している理由がわかりません。これは、通常、PsPathプロパティにあるときに取得するものです。

とにかく、それを取り除く試みが失敗する理由は、整数インデックスを期待しているときに文字列をSubStringメンバー関数に渡しているためです。パスの先頭のインデックスを取得するには、IndexOfメンバー関数を使用します。

$justThePath = $_.FullName.SubString($_.FullName.IndexOf($Path))
于 2013-02-01T18:33:01.707 に答える