授予“ LogonAsAService”权限不会响应

时间:2019-11-20 12:28:41

标签: powershell windows-server windows-server-2016

我有一个应该安装应用程序的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。

这个问题似乎可以重现:

  • 启动系统
  • 运行脚本
  • 工作。
  • 再次运行脚本
  • 不再工作

=>似乎它只在新启动的系统上工作。这不可能确保环境。

我在犯错误吗?这是一个已知问题吗?我真的对这种行为感到困惑,并且似乎无法找到有关到底是什么原因的更多信息。

1 个答案:

答案 0 :(得分:0)

您是否按照此处的建议尝试使用SeServiceLogonRight:

Using powershell, how do I grant "Log on as service" to an account?