我有一些在特定服务帐户下运行的Topshelf服务。如果我从命令行手动安装服务,我可以使用--interactive标志,并出现一个对话框,允许我输入用户名和密码。我希望能够通过Powershell脚本自动执行此操作。
有谁知道怎么做? (并不特别关注Powershell,但我如何在任何安装脚本中提供用户名和密码。)
正如Travis所说,我看了一下命令行选项。几乎为我工作,但现在我有一个逃避问题。要安装,您可以输入,例如, MyService.exe安装-username:Foo -password:Bar。
但是,我必须提供用户名选项的域名和用户名(我知道这是通过--interactive route): MyService.exe安装-username:mydomain \ $ myusername -password:Bar
我找不到逃避这种方法的方法!对不起 - 我的问题变成了别的东西,可能需要标记它的答案并打开另一个。
答案 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.