2008-11-24 10 views
9

J'essaie d'utiliser powershell pour configurer les informations d'identification du compte, mais je dois accorder le compte "Ouvrir une session en tant que service" juste pour que cela fonctionne. Comment puis-je faire cela en PowerShell?À l'aide de PowerShell, comment accorder "Connexion en tant que service" à un compte?

+0

Je suis en train de faire la même chose, sur Windows Server 2008 R2 64 bits * base *, qui ne sont pas livrés avec ntrights.exe (l'outil mentionné dans l'article lié de la réponse). Toute autre aide? –

+0

une autre option ici: https://code.msdn.microsoft.com/windowsapps/Add-log-on-as-a-service-a64dd63c – Rory

Répondre

3

Voici un lien que vous pourriez aussi faire dans PSH. http://www.derkeiler.com/Newsgroups/microsoft.public.windowsxp.security_admin/2003-12/2865.html. Le problème est qu'il n'y a pas vraiment d'API publiques pour gérer ces paramètres, donc vous êtes un peu bloqué en utilisant les outils de ligne de commande fournis dans ResKits.

+2

Merci. J'ai fini par utiliser ntrights pour le faire. ntrights.exe + r SeServiceLogonRight -u http://support.microsoft.com/?kbid=279664 –

1

PowerShell ne dispose pas de moyens indigènes de le faire, ce qui signifie que vous auriez probablement à la recherche à l'une ou WMI ADSI - vous êtes plus susceptibles de trouver des exemples dans VBScript, qui a été autour plus, bien que personnellement, je Je ne pense pas que j'ai jamais compris comment assigner par programme des droits d'utilisateur. Cela ne veut pas dire que ça ne peut pas être fait, mais vous allez probablement regarder en dehors du domaine de PowerShell spécifiquement.

10

Le script Powershell ci-dessous accordera la SeServiceLogonRight sur l'hôte spécifié par computerName à l'utilisateur spécifié par nom d'utilisateur (le script est un extrait ici: https://gist.github.com/grenade/8519655):

<# 
.Synopsis 
    Grant logon as a service right to the defined user. 
.Parameter computerName 
    Defines the name of the computer where the user right should be granted. 
    Default is the local computer on which the script is run. 
.Parameter username 
    Defines the username under which the service should run. 
    Use the form: domain\username. 
    Default is the user under which the script is run. 
.Example 
    Usage: 
    .\GrantSeServiceLogonRight.ps1 -computerName hostname.domain.com -username "domain\username" 
#> 
param(
    [string] $computerName = ("{0}.{1}" -f $env:COMPUTERNAME.ToLower(), $env:USERDNSDOMAIN.ToLower()), 
    [string] $username = ("{0}\{1}" -f $env:USERDOMAIN, $env:USERNAME) 
) 
Invoke-Command -ComputerName $computerName -Script { 
    param([string] $username) 
    $tempPath = [System.IO.Path]::GetTempPath() 
    $import = Join-Path -Path $tempPath -ChildPath "import.inf" 
    if(Test-Path $import) { Remove-Item -Path $import -Force } 
    $export = Join-Path -Path $tempPath -ChildPath "export.inf" 
    if(Test-Path $export) { Remove-Item -Path $export -Force } 
    $secedt = Join-Path -Path $tempPath -ChildPath "secedt.sdb" 
    if(Test-Path $secedt) { Remove-Item -Path $secedt -Force } 
    try { 
    Write-Host ("Granting SeServiceLogonRight to user account: {0} on host: {1}." -f $username, $computerName) 
    $sid = ((New-Object System.Security.Principal.NTAccount($username)).Translate([System.Security.Principal.SecurityIdentifier])).Value 
    secedit /export /cfg $export 
    $sids = (Select-String $export -Pattern "SeServiceLogonRight").Line 
    foreach ($line in @("[Unicode]", "Unicode=yes", "[System Access]", "[Event Audit]", "[Registry Values]", "[Version]", "signature=`"`$CHICAGO$`"", "Revision=1", "[Profile Description]", "Description=GrantLogOnAsAService security template", "[Privilege Rights]", "SeServiceLogonRight = *$sids,*$sid")){ 
     Add-Content $import $line 
    } 
    secedit /import /db $secedt /cfg $import 
    secedit /configure /db $secedt 
    gpupdate /force 
    Remove-Item -Path $import -Force 
    Remove-Item -Path $export -Force 
    Remove-Item -Path $secedt -Force 
    } catch { 
    Write-Host ("Failed to grant SeServiceLogonRight to user account: {0} on host: {1}." -f $username, $computerName) 
    $error[0] 
    } 
} -ArgumentList $username 
4

Voici comment je l'ai résolu:

Basé sur: this article

Vous pouvez télécharger Carbon from here

Module de carbone Premier importation comme suit:

Import-Module -Name $Path_To_Carbon -Global -Prefix CA 

[array]$UserPrivileges = Get-CAPrivileges -Identity $UserName; 
[bool]$LogOnAsAServiceprivilegeFound = $false; 

if ($UserPrivileges.Length > 0) 
{ 
    if ($UserPrivileges -contains "SeServiceLogonRight") 
    { 
     $LogOnAsAServiceprivilegeFound = $true; 
    } 
} 

if ($LogOnAsAServiceprivilegeFound -eq $false) 
{ 
    Grant-CAPrivilege -Identity $UserName "SeServiceLogonRight" 
} 
+0

Inutile de vérifier les privilèges existants. Cela fonctionne même si vous l'appelez plusieurs fois: Grant-CAPrivilege -Identity $ UserName "SeServiceLogonRight" –

Questions connexes