从PowerShell运行NServiceBusHost.exe

3

您好,我有一个 PowerShell 脚本,可以通过群集管理器停止服务、卸载服务、重新安装服务并从群集管理器启动服务。NServiceBus.Host.exe 用于卸载和重新安装服务。我在安装过程中遇到了一些问题。虽然我将“/startManually”作为参数发送,但服务始终是自动启动类型。其次,在安装过程中,我会收到 Login failed for user sql 错误,指出用户名是本地计算机名称,即使我指定了服务使用的用户名和密码。以下是我的安装服务代码行。希望能得到帮助。

& "NServiceBus.Host.exe" ("/install", "/startManually", "/serviceName:$ServiceName", "/displayName:$ServiceName", "/username:$ServiceUserName", "/password:$ServicePassword") > tmp.txt

我们正在调查 /startManually(会在此处报告)。关于与数据库的连接:我们将模式更新作为运行安装的用户运行,因为您指定的“服务”用户可能没有更新/创建生产表的权限。 - Andreas Öhlund
谢谢您发布这个,这将在 NSErviceBus 3.4 版本中处理。NServiceBus GitHub 上有一个待处理的问题:链接 - Shlomi
那么我需要以一个具有对安装机器和指向的数据库的权限的用户身份运行PowerShell脚本? - Lizzard
我们的配置文件中是否有任何内容可以防止模式更新发生? - Lizzard
Andreas,Lizzard的问题有更新吗?我有一个场景:客户端使用Windows身份验证进行SQL连接,我正在从TeamCity(builduser)部署,但是该用户没有访问数据库的权限,只有服务帐户可以访问。是否有办法: a)告诉NSB在第一次启动时创建sagas等表或订阅表,而不是安装 b)或者 - 使用runas选项运行安装程序 - 我尝试了使用凭据的psremoting上的Start-Process,但似乎没有起作用。 - bkhanal
1个回答

1

我通常建议使用Start-Process cmdlet从PowerShell启动进程。这使得启动进程的整个过程(没有双关语)更容易进行故障排除。

您可以将命令行参数构建成变量,并将该结果变量传递到-ArgumentList参数中。

$Arguments = '/install /startManually /serviceName:{0} /displayName:{0} /username:{1} /password:{2}' -f $ServiceName, $ServiceUserName, $ServicePassword)
$nServiceBus = Resolve-Path -Path nServiceBus.Host.exe;

Write-Host -Object ('Argument string is: {0}' -f $Arguments);
Write-Host -Object ('Path to nServiceBus.Host.exe is: {0}' -f $nServiceBus);
Start-Process -Wait -NoNewWindow -FilePath $nServiceBus -ArgumentList $Arguments -RedirectStandardOutput tmp.txt;

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接