如何自动执行Topshelf交互式服务安装?

时间:2013-03-27 13:08:51

标签: topshelf

我有一些在特定服务帐户下运行的Topshelf服务。如果我从命令行手动安装服务,我可以使用--interactive标志,并出现一个对话框,允许我输入用户名和密码。我希望能够通过Powershell脚本自动执行此操作。

有谁知道怎么做? (并不特别关注Powershell,但我如何在任何安装脚本中提供用户名和密码。)

正如Travis所说,我看了一下命令行选项。几乎为我工作,但现在我有一个逃避问题。要安装,您可以输入,例如, MyService.exe安装-username:Foo -password:Bar。

但是,我必须提供用户名选项的域名和用户名(我知道这是通过--interactive route): MyService.exe安装-username:mydomain \ $ myusername -password:Bar

我找不到逃避这种方法的方法!对不起 - 我的问题变成了别的东西,可能需要标记它的答案并打开另一个。

3 个答案:

答案 0 :(得分:4)

特拉维斯用命令行选项向我指出了正确的方向。我的服务帐户用户名有一个问题,前缀是“$”:domain \ $ myuser。我无法找到逃脱它的方法,因此“安装”命令会接受它。

我们创建了一个类似的用户名“myuser”(没有$)。现在这很好用:

MyService.exe install -username:domain\myuser -password:Bar 

答案 1 :(得分:1)

用户名和密码是我的设置中服务的app.config中的配置。这用于RunAs中的服务设置块。

此外,Topshelf还有其他command line options。我不知道文档是100%最新的,但它是一个很好的起点。

答案 2 :(得分:1)

对于未来的读者:

请参阅此网址:

https://kristofmattei.be/2015/01/15/topshelf-install-powershell-get-credentials/

以下是上面网址的重要引用

开始报价

So the best version is:

$credentialsOfCurrentUser = Get-Credential -Message "Please enter your username & password for the service installs"
$networkCredentials = $credentialsOfCurrentUser.GetNetworkCredential();
$username = $credentialsOfCurrentUser.UserName
$password = $networkCredentials.Password

Now that we have those variables we can pass them on to the install of the Topshelf exe:


. $pathToServiceExe install -username `"$username`" -password `"$password`" --autostart


Notice the backticks (`) to ensure the double quotes are escaped.

结束报价