我有一个PowerShell脚本,用来安装一个应用程序。
应用程序依赖于一个windows服务,它需要"LogonAsAService"-right。
我使用这段代码来设置权限:
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 2016)进入这一行(在上面的代码示例中,行为与模块相似,但输出看起来有点不同,问题似乎完全相同):
Write-Host "Enable ServiceLogonRight for $Username"PowerShell在此之后不再作出回应。我所能做的就是退出整个PowerShell。
问题似乎是这样可再生的:
启动系统script
=>,它似乎只在一个刚刚启动的系统上工作。这对环境来说是不可能的。
我犯了什么错误吗?这是一个已知的问题吗?我真的对这种行为感到困惑,似乎找不到更多的信息,确切地说是什么导致了这个问题。
发布于 2019-11-20 14:28:29
您是否尝试过像这里建议的那样使用SeServiceLogonRight:
Using powershell, how do I grant "Log on as service" to an account?
https://stackoverflow.com/questions/58954385
复制相似问题