PowerShell: элемент копирования не может найти путь

Я пытаюсь заставить PowerShell копировать файлы с удаленного компьютера (на котором у меня есть права администратора). права через AD) на локальный компьютер. Не получается в самом странном месте. Вот фрагмент сценария:

    $configs = Get-ChildItem -Recurse -ErrorAction SilentlyContinue -Filter "*.config" $serverUNCPath 
foreach($config in $configs){
    $config_target_dir = $dest.Path + $config.Directory.FullName.Replace($serverUNCPath,"")
    if(Test-Path -Path $config_target_dir){
        Copy-Item $config -Destination  $config_target_dir
    }
}

Это не удается с сообщением

Cannot find path 'D:\ServerDeploy\TestMachine1\website\web.config' because it does not exist.
At :line:39 char:12
+           Copy-Item <<<<  $config -Destination  $config_target_dir

Путь D:\ServerDeploy\TestMachine1\website существует. Я схожу с ума по этому поводу.

Что я могу сделать, чтобы это исправить?


person AndreasKnudsen    schedule 03.09.2009    source источник


Ответы (1)


Ээээ.... Хорошо?

Если бы я заменил строку

 Copy-Item $config -Destination  $config_target_dir

с участием

 Copy-Item $config.FullName $config_target_dir

вдруг волшебным образом сработало....

Что дает?

person AndreasKnudsen    schedule 03.09.2009
comment
Не забывайте, что вы имеете дело с реальными объектами в PS. Вообще говоря, когда вы передаете объект командлету, командлеты довольно хорошо выбирают правильное свойство для работы. В этом случае вы передаете объект System.IO.FileSystemInfo.FileInfo командлету Copy-Item. Я думаю, что командлет, вероятно, по умолчанию использует свойство .Name, и этой информации недостаточно для работы копии. Когда вы явно указываете свойство .FullName командлету, теперь у него есть необходимая информация. - person EBGreen; 03.09.2009
comment
хм, это объяснило бы ошибку, но не дерьмовое сообщение об ошибке. Зачем сообщать об ошибке, что целевое местоположение не существует? - person AndreasKnudsen; 03.09.2009
comment
Какой текущий рабочий каталог на момент выполнения Copy-Item? Я предполагаю, что это D:\ServerDeploy\TestMachine1\website. Как сказал EBGreen, Copy рассматривает $config как относительный путь. Таким образом, он считает, что (join-path (pwd) $config.Name) является полным исходным местоположением. - person Richard Berg; 19.09.2009