運行時,PowerShell腳本的行爲有所不同我試圖使用可用的PowerShell命令(https://psbiztalk.codeplex.com)自動化BizTalk部署。當我從PowerShell ISE UI運行我的腳本時,情況正在發生變化。但是我想爲自己的UI部署我自己的用戶界面,這就是我的問題所在。該腳本的行爲不同,沒有發現在一個點上,這導致錯誤(目前)的任何資源。從C#應用程序,然後從PowerShell ISE
類型「Microsoft.BizTalk.ApplicationDeployment.ResourceCollection」在 大會「Microsoft.BizTalk.ApplicationDeployment.Engine, Version = 3.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'是 未標記爲可序列化。
Get-ApplicationResourceSpec的輸出將是一個System.Xml.XmlDocument
對象。看起來這個命令無法從託管的PowerShell中找到BizTalk應用程序資源,但是ISE環境可以讓我覺得它應該是可能的。
任何想法和/或幫助表示讚賞。
PowerShell腳本:
$SnapIn = Get-PSSnapin | Where-Object { $_.Name -eq "BizTalkFactory.PowerShell.Extensions" }
if ($SnapIn -eq $null)
{
Add-PSSnapin -Name "BizTalkFactory.Powershell.Extensions"
}
Set-Location -Path BizTalk:
cd "BizTalk:\Applications"
Get-ApplicationResourceSpec -Path "MyTestApplication"
從C#應用程序調用
string script = File.ReadAllText("GetResources.ps1")));
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(script);
StringBuilder builder = new StringBuilder();
Collection<PSObject> objects = pipeline.Invoke();
foreach (PSObject obj in objects.Where(t => t != null))
{
builder.AppendLine(obj.ToString());
}
runspace.Close();
UPDATE
由於在BizTalk PowerShell的命令是開源的,我挖得更深一些,並試圖隔離失敗的命令。我發現下面的代碼來得到不同的結果:
# Replace Get-ApplicationResourceSpec -Path "MyTestApplication" from the
# other script with these lines
$App = Get-ChildItem | Where-Object { $_.Name -eq $Application } | Select-Object -First 1
$Group = New-Object Microsoft.BizTalk.ApplicationDeployment.Group
$Group.DBName = $App.Catalog.Database
$Group.DBServer = $App.Catalog.Instance
$Group.SqlConnection.ConnectionString
在ISE環境,ConnectionString中被設置爲一個有效的值,但不是在C#情況。這導致非現有資源在第二種情況:
$App = $Group.Applications["MyTestApplication"]
$App.ResourceCollection.Count # equals 88 vs. 0
如此看來,在BizTalk內部類型Microsoft.BizTalk.ApplicationDeployment.Group
不行爲相同的方式。對此發現有何更多想法?
我之前在此博客頁面上,但沒有通過準確讀取它。 - 我知道我可以直接使用管理對象,但我希望通過腳本高度定製一些部署點 – Scoregraphic