Причина в том, что текущий рабочий каталог в powershell не обязательно совпадает с рабочим каталогом процесса.
Это связано с тем, что рабочее направление powershell (Get-Location
) может использовать другую файловую системупровайдеры - такие как реестр или сертификаты.Кроме того, поскольку powershell может иметь несколько пространств выполнения, у каждого из них может быть свой текущий рабочий каталог.
Для этого есть два обходных пути.
Один из них - использовать Resolve-Path
(Resolve-Path "orders.xml")
, хотя этопроверит существование до возврата значения, поэтому при создании новых файлов это может быть проблемой.Другой вариант - использовать псевдоним get-location: $pwd
, например ("$pwd\orders.xml")
Так что для вашего примера вы можете изменить строку 2 на
$config = [xml](get-content (Resolve-Path "web.config"))
или
$config = [xml](get-content "$pwd\web.config")
и соответственно строка 12 будет
$config.Save((Resolve-Path "web.config"));
или
$config.Save("$pwd\web.config");