Закрытие файла xml после его чтения с помощью Powershell

Я делаю скрипт для публикации веб-приложений с помощью PowerShell.

Поскольку я нахожусь в начале разработки, я поочередно редактирую скрипт и файл xml. На данный момент скрипт довольно маленький и простой:

$settings = [xml](Get-Content c:\PublishData.xml)
$whereToProjectsAreLocally = $settings.publishing.globals.localprojectdir

Но у меня есть проблема. Как только я запускаю скрипт и проверяю, что все работает по плану, я вижу, что редактирование файла xml (через Notepad++) невозможно. Я получаю сообщение об ошибке, что сохранение не удалось, и я должен проверить, не используется ли файл другим приложением.

Никакие другие приложения, кроме Notepad++ и Powershell ISE, не используют этот файл.

Закрытие ISE не решает проблему (закрытие ISE каждый раз при запуске сценария также не является решением моей мечты).

Закрытие Notepad++ также не решает проблему (хотя самая новая версия запоминает изменения, даже если я их не сохраняю, но это тоже не решение).

Я полагаю, что в фоновом режиме есть что-то вроде XmlReader, которое я не закрыл. Мой вопрос: как закрыть его после чтения содержимого из файла xml?

EDIT: тот же скрипт работает нормально, если xml хранится не на C:\, а в более низком каталоге. Как я могу заставить его работать в корневом каталоге C:\?


person Maurice Klimek    schedule 27.02.2015    source источник
comment
У меня этого не происходит на моем powershell v4, есть большая вероятность, что это вызвано чем-то другим.   -  person VoidStar    schedule 27.02.2015
comment
Используйте Handle от Sysinternals, чтобы проверить, какой процесс блокирует файл XML.   -  person vonPryz    schedule 27.02.2015
comment
./Handle.exe C:\PublishData.xml сказал, что соответствующие дескрипторы не найдены.   -  person Maurice Klimek    schedule 27.02.2015
comment
Мой хрустальный шар говорит мне, что вы запускаете PowerShell ISE с повышенными привилегиями (запуск от имени администратора), но не Notepad++   -  person helb    schedule 27.02.2015
comment
@helb, ты прав. Так было. Мне стыдно...   -  person Maurice Klimek    schedule 27.02.2015


Ответы (1)


Попробуй это:

$xmlFile = 'c:\PublishData.xml'
$rawXML = Get-Content $xmlFile -Raw
$settings = [XML]$rawXML

Изменить: просто подумал, это может быть еще один вариант:

$settings = [xml]([System.IO.File]::ReadAllLines($xmlFile))
person Brian    schedule 27.02.2015