У меня были проблемы при выполнении аналогичных вещей, работающих с XML в PowerShell.В большинстве случаев я считаю, что формат XML файла, с которым я работаю, просто не похож на PowerShell.Я могу выполнить команды без ошибок, посмотреть на мой файл XML, и ничего не было добавлено.Я обычно отношусь к файлу как к обычному текстовому файлу.Однако ...
В вашем случае, я думаю, вы, возможно, захотите переоценить то, как вы запрашиваете информацию.Вы утверждаете, что он запускается для каждой базы данных, когда, если вы используете <a href="http://msdn.microsoft.com/en-us/library/ms188755.aspx" rel="nofollow">sys.dm_db_index_usage_stats</a>
, вы можете получить один запрос для каждого индекса, используемого в любой базе данных в экземпляре.Какой Кимберли Трипп предлагает быстрый запрос, который можно использовать здесь (этот скрипт используется ниже).
Это, в свою очередь, предоставит вам один XML-файл:
$indexStats = @"
SELECT getdate() AS RunTime
, DB_NAME(i.database_id) as DatabaseName
, OBJECT_NAME(i.object_id, i.database_id) as ObjectName
, i.user_seeks
, i.last_user_seek
, i.user_scans
, i.last_user_scan
, i.user_lookups
, i.last_user_lookup
FROM sys.dm_db_index_usage_stats AS i
WHERE object_id > 100
"@
$xml = Invoke-Sqlcmd -ServerInstance -Database master -Query $indexStats |
ConvertTo-Xml
Я понимаю, что у вас может быть причина сделать это для каждой отдельной базы данных в вашей среде, но это, кажется, более эффективно и требует меньше кода, чтобы не отставать от вашего сценария.