Alcuni software, come ad esempio Rufus, richiedono i privilegi amministrativi per essere eseguiti e non è possbile per un utente non amministratore utilizzarli.
In ambienti aziendali in cui gli utenti non posseggono i diritti amministativi dei propri PC, potrebbe essere utile permettere loro di avviare il software al logon.
È possibile utilizzare il Task Scheduler di Windows per programmare al logon degli utenti l’avvio dei software richiesti con privilegi elevati e tramite PSexec eseguirlo nella sessione dell’utente non amministratore.
La procedura è stata testata su un PC con Windows 11 Professional, ma dovrebbe funzionare su tutte le versioni di Windows.
DOWNLOAD DEI SYSINTERNALS
Scaricare la suite dei Sysinternals dal sito Microsoft:
Per lo scopo di questa di questa guida sarà sufficiente l’eseguibile “PSexec64.exe“.
COPIA DI PSEXEC
Esegurie da PowerShell amministrativa il comando:
0 |
New-Item -Path "C:\" -Name "AdminExecutables" -ItemType "directory" |
NOTA BENE: Assicurarsi che solo gli amministatori possano modificare la folder appena creata ed il suo contenuto.
ATTENZIONE: Evitare di utilizzare gli spazi nel nome della cartella o di inserirla in posizioni del filesystem il cui path contiene spazi.
Copiare l’eseguibile PSexec64.exe nella folder appena creata (“C:\AdminExecutables“).
CREAZIONE DELLO SCRIPT
Creare lo script C:\AdminExecutables\RunAtUserLogon.ps1:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$PsexecExecutable = "C:\AdminExecutables\PsExec64.exe" $ExecutablesList = @("C:\ProgramData\chocolatey\bin\rufus.exe","notepad") $LogPath = "C:\AdminExecutables\log.txt" #$LogPath = $null if ($LogPath -ne $null) { "Date: {0}, Whoami: {1}, Session ID: {2}" -f (Get-Date), (whoami), $SessionID | Out-File -Append -FilePath $LogPath } $SessionID = (Get-Process | Sort-Object -Descending -Property SI | Select-Object -First 1).SI $ExecutablesList | ForEach-Object { Start-Process -FilePath $PsexecExecutable -ArgumentList '-accepteula','-si',$SessionID,$_ } |
Modificare la lista di eseguibili in base alle proprie esigenze.
Poiché Windows assegna i session ID in modo incrementale, lo script utilizza il “SI” maggiore tra quelli dei processi esistenti, in modo da essere sicuro di aprire il software nella sessione dell’utente che ha appena effettuto il logon.
CREAZIONE DELL’UTENZA AMMINISTRATIVA
Questo step è necessario solamente se non si vuole utilizzare SYSTEM come utenza per eseguire il task.
Per creare l’utente eseguire da PowerShell amministrativa i seguenti comandi:
0 1 |
$Password = Read-Host -AsSecureString New-LocalUser -AccountNeverExpires -UserMayNotChangePassword -Name "TasksLocalAdmin" -Password $Password -Description "Account per task schedulati come admin" |
ATTENZIONE: sostituire TasksLocalAdmin con l’username dell’utenza desiderata
Aggiungere l’utenza appena creata agli amministratori con il comando:
0 |
Add-LocalGroupMember -Member TasksLocalAdmin -Group Administrators |
CREZIONE DEL TASK
Per far sì che lo script venga eseguito durante il logon dell’utente è necessario creare un task tramite il Task Scheduler che venga eseguito con i privilegi più elevati.
Esegurie da PowerShell amministrativa i seguenti comandi:
0 1 2 |
$TaskAction = New-ScheduledTaskAction -Execute "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument '-ExecutionPolicy Bypass -File "C:\AdminExecutables\RunAtUserLogon.ps1"' $TaskTrigger = New-ScheduledTaskTrigger -AtLogon $Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries |
Nel caso in cui si voglia utilizzare un’utenza dedicata per il task eseguire il comando:
0 1 |
$NewTask = New-ScheduledTask -Action $TaskAction -Trigger $TaskTrigger -Settings $Settings Register-ScheduledTask -TaskName "RunAsAdmin" -InputObject $NewTask -User "$env:computername\TasksLocalAdmin" -Password "PASSWORD-HERE" |
ATTENZIONE: sostituire TasksLocalAdmin con l’username dell’utenza e inserire la password al posto di PASSWORD-HERE
Se invece, per eseguire il task, si volesse utilizzare SYSTEM eseguire i seguenti comandi:
0 1 2 |
$Principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest $NewTask = New-ScheduledTask -Action $TaskAction -Principal $Principal -Trigger $TaskTrigger -Settings $Settings Register-ScheduledTask -TaskName "RunAsAdmin" -InputObject $NewTask |
VERIFICA DEL FUNZIONAMENTO
Effettare il logout dell’utente non amministratore con cui si vuole verificare il funzionamento.
Successivamente accedere e verificare che vengano aperti i software con privilegi elevati.
0 commenti