我有一个应该安装应用程序的PowerShell脚本。
该应用程序依赖于Windows服务,该服务需要“ LogonAsAService”权限。
我使用以下代码设置权限:
Powershell:
function getUserName {
Param(
[Parameter(Mandatory=$true)]
[System.Net.NetworkCredential]
$credentials
)
if($credentials.Domain){
return $credentials.Domain + "\" + $credentials.UserName;
}
return $env:COMPUTERNAME + "\" + $credentials.UserName;
}
$serviceUserAccountName = getUsername($serverServiceAccount)
function Add-ServiceLogonRight([string] $Username) {
Write-Host "Enable ServiceLogonRight for $Username"
$tmp = New-TemporaryFile
secedit /export /cfg "$tmp.inf" | Out-Null
(gc -Encoding ascii "$tmp.inf") -replace '^SeServiceLogonRight .+', "`$0,$Username" | sc -Encoding ascii "$tmp.inf"
secedit /import /cfg "$tmp.inf" /db "$tmp.sdb" | Out-Null
secedit /configure /db "$tmp.sdb" /cfg "$tmp.inf" | Out-Null
rm $tmp* -ea 0
}
# Grant rights to the account
Write-Host "Granting logon-as-service user-rights"
Add-ServiceLogonRight $serviceUserAccountName
我还尝试了其他方法,例如使用以下模块:https://gallery.technet.microsoft.com/scriptcenter/Grant-Revoke-Query-user-26e259b0
问题:
这些方法在理论上是可行的,我在这两种方法上均取得了积极的成果,但仅进行了一次或两次尝试。在很多情况下,系统(当前为Windows Server 2016)进入这一行(对于上面的代码示例,此行为与该模块相似,但输出看起来有所不同,问题似乎完全相同):
Write-Host "Enable ServiceLogonRight for $Username"
PowerShell之后不再响应。我所能做的就是退出整个PowerShell。
这个问题似乎可以重现:
=>似乎它只在新启动的系统上工作。这不可能确保环境。
我在犯错误吗?这是一个已知问题吗?我真的对这种行为感到困惑,并且似乎无法找到有关到底是什么原因的更多信息。
答案 0 :(得分:0)
您是否按照此处的建议尝试使用SeServiceLogonRight:
Using powershell, how do I grant "Log on as service" to an account?