Skip to main content

Worklet: Set Screensaver Settings for Windows 7

  • October 18, 2019
  • 2 replies
  • 181 views

Nic-Automox

Only works on Windows 7 and prior.

Evaluation code:

#REQUIRES -Version 2.0
<#
.SYNOPSIS
    This script tests to see if the Screen saver remediation script has been run.
.DESCRIPTION
    This script checks the screen saver reg keys of the current user, if the remediation script has
    been run, these value will match. If the values are different then those in in this script, it will
    return a 1. if the settings match it will return a 0.
.NOTES
    File Name       :ScreenSaverSettings.ps1
    Author          :Automox
    Prerequisite    :PowerShell V2 over win7 and upper
#>
#Handle Exit Codes:
trap {  $host.ui.WriteErrorLine($_.Exception); exit 90 }

function ScreenSaverTest {
    #############These settings must match those in the Remediation file#######################
    $ScreenSaveActive = 0
    $SCRNSAVEEXE="C:\Windows\system32\Bubbles.scr" #Which screen saver to use. EX: C:\Windows\system32\Bubbles.scr
    $ScreenSaverIsSecure= 0 #password needed on wake up
    $ScreenSaveTimeOut= 30 #seconds to activate screen saver
    ###########################################################################################

    $val1=Get-ItemProperty 'HKCU:\Control Panel\Desktop\' |Select-Object -ExpandProperty ScreenSaveActive | out-string
    $val2=Get-ItemProperty 'HKCU:\Control Panel\Desktop\' |Select-Object -ExpandProperty SCRNSAVE.EXE | out-string
    $val3=Get-ItemProperty 'HKCU:\Control Panel\Desktop\' |Select-Object -ExpandProperty ScreenSaverIsSecure | out-string
    $val4=Get-ItemProperty 'HKCU:\Control Panel\Desktop\' |Select-Object -ExpandProperty ScreenSaveTimeOut | out-string

    if ($ScreenSaveActive -eq $val1.Trim() -and $SCRNSAVEEXE -eq $val2.Trim() -and $ScreenSaverIsSecure -eq $val3 -and $ScreenSaveTimeOut -eq $val4) {
        return 0
    } else {
        return 1
    }
}

Remediation code:

#REQUIRES -Version 2.0
<#
.SYNOPSIS
    This script allows an admin to edit settings relating to Screensavers and Lockscreens.
.DESCRIPTION
    This script finds every user on a windows computer and changed their screensavers to the supplied settings.
    These changes take place immediatly.
    If the "ScreenSaveActive" setting is set to 0 but the "ScreenSaverIsSecure" setting is set to 1
    The system will display the lockscreen after the time specified in the ScreenSaveTimeOut setting.
.NOTES
    File Name       :ScreenSaverSettings.ps1
    Author          :Automox
    Prerequisite    :PowerShell V2 over win7 and upper
#>
#Handle Exit Codes:
trap {  $host.ui.WriteErrorLine($_.Exception); exit 90 }

function ScreenSaverSettings{
    #############Change the settings in this block#######################
    $ScreenSaveActive = 0
    $SCRNSAVEEXE="C:\Windows\system32\Bubbles.scr" #Which screen saver to use. EX: C:\Windows\system32\Bubbles.scr
    $ScreenSaverIsSecure= 0 #password needed on wake up
    $ScreenSaveTimeOut= 30 #seconds to activate screen saver
    #####################################################################

    #Get Necessary Info:
    $UID_Regex = "^S-\d-\d+-(\d+-){1,14}\d+$"
    $UserInfo = gp 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*' | Where-Object {$_.PSChildName -match $UID_Regex} | Select  @{name="HKEY";expression={"$($_.ProfileImagePath)\ntuser.dat"}},@{name="User";expression={$_.ProfileImagePath -replace '^(.*[\\\/])', ''}},@{name="UID";expression={$_.PSChildName}}
    $LoadedHives = gci Registry::HKEY_USERS | ? {$_.PSChildname -match $UID_Regex} | Select @{name="UID";expression={$_.PSChildName}}
    $UnloadedHives = Compare-Object $UserInfo.UID $LoadedHives.UID | Select @{name="UID";expression={$_.InputObject}}, HKEY, User

    #Do Actions on every user:
    Foreach ($item in $UserInfo) {
        IF ($item.UID -in $UnloadedHives.UID) {
            reg load HKU\$($Item.UID) $($Item.HKEY) | Out-Null
        }
        Set-ItemProperty registry::HKEY_USERS\$($Item.UID)\'Control Panel'\Desktop\ -Name "ScreenSaveActive" -Value $ScreenSaveActive
        Set-ItemProperty registry::HKEY_USERS\$($Item.UID)\'Control Panel'\Desktop\ -Name "ScreenSaverIsSecure" -Value $ScreenSaverIsSecure
        Set-ItemProperty registry::HKEY_USERS\$($Item.UID)\'Control Panel'\Desktop\ -Name "ScreenSaveTimeOut" -Value $ScreenSaveTimeOut
        Set-ItemProperty registry::HKEY_USERS\$($Item.UID)\'Control Panel'\Desktop\ -Name "SCRNSAVE.EXE" -Value $SCRNSAVEEXE
        # cleanup
        IF ($item.UID -in $UnloadedHives.UID) {
            [gc]::Collect()
            reg unload HKU\$($Item.UID) | Out-Null
        }
    }
}

ScreenSaverSettings

2 replies

Forum|alt.badge.img
  • Channel Partner
  • 8 replies
  • March 6, 2020

Is there a version of this for Win10 available?


Nic-Automox
  • Author
  • Former Automox Employee
  • 832 replies
  • March 6, 2020

Not currently, unfortunately, but I can add that to my list of requested worklets. Shouldn’t be to hard to do, as there’s good examples out there of scripts that we can run through Automox:


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings