另一个PowerShell / BizTalk问题,但首先是一些背景:
我们在一个开发人员环境中有很多(8个进程,2个隔离)主机实例。其中一个实例已损坏(“安装失败”作为管理控制台中的状态)。我看到它缺少密码并试图手动更新它。没有运气,我的密码错了,它也是我们CMDB中为帐户存储的密码...哦,好吧。只是重置它并在所有主机实例上更改它。
好吧,我想尝试以PowerShell的方式做到这一点。它有用,但只有实例在ServiceState 8中? ServiceState 4(已启动)当然会出错。但ServiceState 1(已停止)也是如此?
非常讨厌。这是安装失败的方法:
异常调用“Install”:“安装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
}
}
}
有人有想法吗?这让我很烦恼!
致以最诚挚的问候,
乔金姆
答案 0 :(得分:0)
$hostinst.ServiceState -eq 1 -or 8
应该重写
($hostinst.ServiceState -eq 1) -or ($hostinst.ServiceState -eq 8)
在PowerShell控制台中试用:
3 -eq 1 -or 8
答案 1 :(得分:0)
找到了答案!
如果实例在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
}
}
}