2011-12-07 8 views
0

私は、インデックス使用状況の統計を照会するルーチンをpowershellに持っています。クエリは、サーバー上の各データベースに対して実行され、xmlスニペットを出力します。私は1つのXMLファイルですべての結果を取得しようとしています。既存のXMLファイルにノードを追加する部分を除いて、すべてのコードが機能します。私は結果のないAppendNodeとImportNodeを試しました。ここでは動作しないスニペットがあります。xmlファイルにpowershellでノードを追加する

答えて

0

PowerShellでXMLを使って同様のことをするのに苦労しました。ほとんどの場合、私が作業しているファイルのXML形式はPowerShellが好きではないと信じています。私はエラーなしでコマンドを実行することができます、私のXMLファイルを見て何も追加されませんでした。私は通常、通常のテキストファイルのようにファイルを扱うことになります。しかし...

あなたの場合、情報をどのようにクエリしているか再評価したいと思うかもしれません。 sys.dm_db_index_usage_statsを使用している場合は、インスタンス上の任意のデータベースで使用されているすべてのインデックスに対して1つのクエリを取得できます。 Kimberly Trippは、here(これは以下に使用するスクリプトです)で使用できるクイッククエリを提供しています。


$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 

私はあなたがお使いの環境内の個々のデータベースに対してそれを行うための理由があるかもしれません理解し、これは、より効率的であると思われると、次のようになります。今度は、1つのXMLファイルをご提供する

あなたのスクリプトに追いつくための少ないコード。

0

これを試してください。 XML構造を複製するために、私はConvertTo-XMLを使って2つのxmlオブジェクトを作成しました。 2番目のオブジェクトは最初のオブジェクトに追加され、ディスクに保存されます。

$xml1 = dir -path C:\Users\andy | ? {$_.PsIsContainer} | ConvertTo-Xml 
$xml2 = dir -path C:\ | ? {$_.PsIsContainer} | ConvertTo-Xml 

$objectNodes = $xml2.SelectNodes('/Objects/Object') 
if ($objectNodes) { 
    foreach ($objectNode in $objectNodes) { 
     $importedNode = $xml1.ImportNode($objectNode, $true) 
     $xml1.DocumentElement.AppendChild($importedNode) | Out-Null 
    } 
} 

$xml1.Save("C:\Users\andy\Desktop\output.xml") 
関連する問題