Я пытаюсь получить 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
существует. Я сойду с ума по этому поводу.
Что я могу сделать, чтобы исправить это?
Не забывайте, что вы имеете дело с реальными объектами в PS. Вообще говоря, когда вы передаете объект командлету, командлеты довольно хороши при выборе правильного свойства для работы. В этом случае вы передаете объект System.IO.FileSystemInfo.FileInfo командлет Copy-Item. Я думаю, что командлет, вероятно, по умолчанию не использует свойство .Name, и для работы копии недостаточно информации. Когда явным образом передаю свойство .FullName командлету, он теперь имеет информацию, которая ему нужна. – EBGreen
Хмм, это объясняет ошибку, но не * дерьмовую ошибку. Зачем сообщать как ошибку, что целевое местоположение не существует? – AndreasKnudsen
Каков текущий рабочий каталог в тот момент, когда выполняется копирование? Я предполагаю, что это D: \ ServerDeploy \ TestMachine1 \ website. Как и EBGreen, Copy обрабатывает $ config как относительный путь. Таким образом, он считает, что (join-path (pwd) $ config.Name) * - * полное местоположение источника. –