2009-09-03 5 views
3

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

$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 существует. Я сойду с ума по этому поводу.

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

ответ

7

Eeeeh .... ОК?

Если я заменил линию

Copy-Item $config -Destination $config_target_dir 

с

Copy-Item $config.FullName $config_target_dir 

вдруг волшебно работал ....

Что это дает?

+6

Не забывайте, что вы имеете дело с реальными объектами в PS. Вообще говоря, когда вы передаете объект командлету, командлеты довольно хороши при выборе правильного свойства для работы. В этом случае вы передаете объект System.IO.FileSystemInfo.FileInfo командлет Copy-Item. Я думаю, что командлет, вероятно, по умолчанию не использует свойство .Name, и для работы копии недостаточно информации. Когда явным образом передаю свойство .FullName командлету, он теперь имеет информацию, которая ему нужна. – EBGreen

+0

Хмм, это объясняет ошибку, но не * дерьмовую ошибку. Зачем сообщать как ошибку, что целевое местоположение не существует? – AndreasKnudsen

+0

Каков текущий рабочий каталог в тот момент, когда выполняется копирование? Я предполагаю, что это D: \ ServerDeploy \ TestMachine1 \ website. Как и EBGreen, Copy обрабатывает $ config как относительный путь. Таким образом, он считает, что (join-path (pwd) $ config.Name) * - * полное местоположение источника. –

Смежные вопросы