还有另一个PowerShell/BizTalk问题,但首先是一些背景:
我们在一个开发人员环境中有很多(8个进程中,2个独立的)主机实例。其中一个实例已损坏(管理控制台中的状态为"安装失败")。我发现它缺少密码,并尝试手动更新。运气不好,我的密码是错误的,而且它也是为我们CMDB中的帐户存储的相同密码。。。哦,好吧。只是重置它并在所有主机实例上更改它。
好吧,我想试试PowerShell的方式。它有点工作,但前提是实例处于ServiceState 8?ServiceState 4(已启动)当然会出现错误。但ServiceState 1(已停止)也是如此?
很烦人。失败的是安装方法:
调用"安装"时出现异常:"安装Windows NT时出错服务BTSSvc$Test_host。请验证以下内容:1) 提供的凭据是正确的,并且指定的用户名具有"日志on as service"特权已启用。2) 所有Microsoft管理控制台(MMC)服务窗口都已关闭。窗口如果服务已被删除,但仍被打开的MMC窗口引用。"
代码:
$hosts = Get-WmiObject MSBTS_HostInstance -namespace 'root/MicrosoftBizTalkServer'
foreach($hostinst in $hosts)
{
if ($hostinst.Logon -eq $acc)
{
if($hostinst.ServiceState -eq 1 -or 8)
{
write-host "Hostinstans" $hostinst.HostName "har ServiceState" $hostinst.ServiceState
$hostinst.Install($acc, $pw, "True")
Start-Sleep -Seconds 30
write-host "Hostinstans" $hostinst.HostName "har nytt lösenord och ServiceState" $hostinst.ServiceState
}
}
}
有人有主意吗?这让我讨厌极了!
致问候,
Joakim
$hostinst.ServiceState -eq 1 -or 8
应该重写
($hostinst.ServiceState -eq 1) -or ($hostinst.ServiceState -eq 8)
在PowerShell控制台中试用:
3-当量1-或8-
找到了答案!
如果实例处于ServiceState 1,在对其进行任何更改之前,我必须先卸载它!我的代码应该是这样的(例如):
$hosts = Get-WmiObject MSBTS_HostInstance -namespace 'root/MicrosoftBizTalkServer'
foreach($hostinst in $hosts)
{
if ($hostinst.Logon -eq $acc)
{
if(($hostinst.ServiceState -eq 1) -or ($hostinst.ServiceState -eq 8))
{
if($hostinst.ServiceState -eq 1)
{
$hostinst.Uninstall()
}
write-host "Hostinstans" $hostinst.HostName "har ServiceState" $hostinst.ServiceState
$hostinst.Install($acc, $pw, "True")
Start-Sleep -Seconds 30
write-host "Hostinstans" $hostinst.HostName "har nytt lösenord och ServiceState" $hostinst.ServiceState
}
}
}