Mass resiuming/terminating with PowerShell and xml
BT yra bug'as/feature'as, kad jei parsini instance'ą naudodamas Microsoft.Biztalk.Operation biblioteką, o paskui bandai jį reziuminti/terminatinti su ResiumeInstance arba TerminateInstance, gali sukelti blokavimus MessageBox'e, kas sustabdis ar bent labai sulėtins visą sistemos darbą. Tai pasireiškia dirbant su dideliais instance'ų kiekiais.
Kad to išvengt, galima išskaidyti procesą į du etapus - pirma išrinkt reikalingus instance'us, pvz surašant juos į atskirą failą. O po to perleidžiant failą per PS ar kitokį scriptą:
[Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Operations.dll")
[Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Pipeline.dll")
[Reflection.Assembly]::LoadWithPartialName("System.Xml")
[Reflection.Assembly]::LoadWithPartialName("System.Collections")
# sukuriam operations objektą
$btObj = new-object Microsoft.BizTalk.Operations.BizTalkOperations("servername", "BizTalkMgmtDb")
# užsikraunam failą su instance'ų id sąrašu
$xmlDoc = new-Object -type System.Xml.XmlDocument
$xmlDoc.Load("c:\users\user\desktop\rez.txt")
# įsivedam counterį kad matytume progresą
$counter = 0
# einam per visus failo instance id
foreach ( $xNode in $xmlDoc.SelectNodes("Instances/InstanceId")){
$gd = new-Object System.Guid $xNode.get_InnerXml().ToString()
$btObj.TerminateInstance($gd)
# arba $btObj.ResiumeInstance($gd)
$counter = $counter + 1
"viso ######## " + $counter + " ##########"
}
šiuo atveju xml struktūra
<?xml version="1.0"?>
<Instances>
<InstanceId>aaaaa-bbbb-cccc-dddd-eeeee</InstanceId>
<InstanceID>11111-2222-3333-4444-55555</InstanceId>
</Instances>
Aišku galima susikurti kokį nori formatą, tereiks pakeisti xpath foreach sakinyje