3

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

有谁知道如何做到这一点?(不特别关心 Powershell,但我如何在任何安装脚本中提供用户名和密码。)

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

但是,我必须为用户名选项提供域和用户名(我通过执行 --interactive 路由知道这一点): MyService.exe install -username:mydomain\$myusername -password:Bar

我找不到一种方法来逃避这个有效的方法!抱歉 - 我的问题已经演变成其他问题,可能需要将其标记为已回答并打开另一个问题。

4

3 回答 3

4

Travis 使用命令行选项为我指明了正确的方向。我的服务帐户用户名还有一个问题,该用户名以“$”为前缀:domain\$myuser。我找不到逃避它的方法,所以“安装”命令会接受它。

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

MyService.exe install -username:domain\myuser -password:Bar 
于 2013-03-27T19:45:09.633 回答
1

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

此外,Topshelf 还有其他命令行选项。我不知道文档是否 100% 是最新的,但这是一个很好的起点。

于 2013-03-27T15:22:15.887 回答
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.

结束报价

于 2017-03-24T14:16:57.893 回答