运行时,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