lib/core/windows/Update-IcingaWindowsUserPermission.psm1
function Update-IcingaWindowsUserPermission() { param ( [string]$SID = '', [switch]$Remove = $FALSE ); if ([string]::IsNullOrEmpty($SID)) { Write-IcingaConsoleError 'You have to specify the SID of the user to set the security profile to'; return; } if ($SID.Length -le 16) { Write-IcingaConsoleWarning 'It seems the provided SID "{0}" is a system SID. Skipping permission update' -Objects $SID; return; } if ((Test-IcingaManagedUser -SID $SID) -eq $FALSE) { Write-IcingaConsoleWarning 'This user is not managed by Icinga directly. Skipping permission update'; return; } $UpdatedProfile = New-IcingaTemporaryFile; $SystemOutput = Start-IcingaProcess -Executable 'secedit.exe' -Arguments ([string]::Format('/export /cfg "{0}.inf"', $UpdatedProfile)); $NewSecurityProfile = @(); if ($SystemOutput.ExitCode -ne 0) { throw ([string]::Format('Unable to fetch security profile: {0}', $SystemOutput.Message)); return; } $SecurityProfile = ''; if ($Remove -eq $FALSE) { $SecurityProfile = Get-Content "$UpdatedProfile.inf"; foreach ($line in $SecurityProfile) { if ($line -like '*SeServiceLogonRight*') { $line = [string]::Format('{0},*{1}', $line, $SID); } if ($line -like '*SeDenyNetworkLogonRight*') { $line = [string]::Format('{0},*{1}', $line, $SID); } if ($line -like '*SeDenyInteractiveLogonRight*') { $line = [string]::Format('{0},*{1}', $line, $SID); } $NewSecurityProfile += $line; } } else { $SecurityProfile = Get-Content "$UpdatedProfile.inf" -Raw; $SecurityProfile = $SecurityProfile.Replace([string]::Format(',*{0}', $SID), ''); $SecurityProfile = $SecurityProfile.Replace([string]::Format('*{0},', $SID), ''); $NewSecurityProfile = $SecurityProfile; } Set-Content -Path "$UpdatedProfile.inf" -Value $NewSecurityProfile; $SystemOutput = Start-IcingaProcess -Executable 'secedit.exe' -Arguments ([string]::Format('/import /cfg "{0}.inf" /db "{0}.sdb"', $UpdatedProfile)); if ($SystemOutput.ExitCode -ne 0) { throw ([string]::Format('Unable to import security profile: {0}', $SystemOutput.Message)); return; } $SystemOutput = Start-IcingaProcess -Executable 'secedit.exe' -Arguments ([string]::Format('/configure /cfg "{0}.inf" /db "{0}.sdb"', $UpdatedProfile)); if ($SystemOutput.ExitCode -ne 0) { throw ([string]::Format('Unable to configure security profile: {0}', $SystemOutput.Message)); return; } Remove-Item $UpdatedProfile*; } |