POwershell - How to pull the screen saver time out value

Hi EE

I am trying to pull from multiple machines what the value is set for the screen saver .
I am testing with the line below on one machine only and its not showing the correct seconds .. The screen saver is set via policy for 15 mins and when I run the line below
it shows the ScreenSaverTimeout to 600 seconds .. I was thinking I should see 900 seconds .. any idea why ?

Get-WmiObject -ComputerName (get-content c:\temp\wks.txt) Win32_Desktop
LVL 2
MilesLoganAsked:
Who is Participating?
 
SubsunCommented:
Try..
GC c:\temp\wks.txt | %{
$Computer = $_
	If (Test-Connection $Computer -Quiet){
		Try {
		Get-WmiObject -ComputerName $Computer Win32_Desktop -EA STOP | Select @{N="Computer";e={$Computer}},Name,ScreenSaverActive,ScreenSaverTimeout
		}
		Catch{
		$_.Exception.Message | Select @{N="Computer";e={$Computer}},@{N="Name";e={$_}},ScreenSaverActive,ScreenSaverTimeout
		}
	}
	Else{
	"" | Select @{N="Computer";e={$Computer}},@{N="Name";e={"Computer not reachable"}},ScreenSaverActive,ScreenSaverTimeout
	}
} | Select Computer,Name,ScreenSaverActive,ScreenSaverTimeout | Export-Csv c:\temp\Wksreport.csv -NTI

Open in new window

I am getting the correct results.. Did you check the computer and see if the values set is same as in the result?
0
 
Giovanni HewardCommented:
Here's a script you can use.

GetSetScreenSaverTimeOut.ps1

Param([switch]$debug, $value = 120)
Function Get-RegistryValue([ref]$in)
{
 Write-Debug $MyInvocation.MyCommand.name
 $in.value = (Get-ItemProperty -path $path -name $name).$name
} #end Get-RegistryValue

Function Set-RegistryValue($value)
{
 Write-Debug $MyInvocation.MyCommand.name
 Set-ItemProperty -Path $path -name $name -value $value
} #end Get-RegistryValue

Function Write-Feedback($in)
{
 Write-Debug $MyInvocation.MyCommand.name
 "The $name is set to $($in)"
} #end Write-Feedback

# *** Entry Point ***
if($debug) { $DebugPreference = "continue" }
$path = 'HKCU:\Control Panel\Desktop'
$name = 'ScreenSaveTimeOut'
$in = $null

Get-RegistryValue([ref]$in)
Write-Feedback($in)
Set-RegistryValue($value)
Get-RegistryValue([ref]$in)
Write-Feedback($in)

Open in new window


If the script is run with the –debug switch, the Write-Debug cmdlet will display additional information on the screen.
0
 
MilesLoganAuthor Commented:
Hi x66_x72_x65_x65 ..  where do I enter the machine(s) to check ?
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
Giovanni HewardCommented:
As written, the script is designed to run locally.  You can deploy it via GPO.
0
 
MilesLoganAuthor Commented:
Hi subsun .. this is exactly what I was looking for but .. the Wksreport.csv report is showing
600 for the ScreenSaverTimeout .. I am logged in to that test machine and the screen saver is set to 15 min by the policy assigned to the AD group that the machine object is a member of .. why would I not see 900 in the report ?
0
 
SubsunCommented:
Are you seeing it for the same user which GPO is applied? Is it reporting wring time for all computers?
0
 
MilesLoganAuthor Commented:
Hi Subsun ..  the GPO is working correct .. I logged in to a machine and see the correct time ( 15 mins ) but the report shows 10 mins .
0
 
SubsunCommented:
I will test and let you know as soon as I can..
0
 
SubsunCommented:
Today I got some time to test this.. If you are getting incorrect information with WMI. then probably the correct information is coming from registry..

HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveTimeOut

You can access the CURRENT_USER  key from remote computer but problem is it will give you the registry key values for the specific user which you use to run the script..

You can use the following code against any of the computer and see if you get the correct result..

$Server = "ServerA" 
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('currentuser',$Server)
$objRegKey= $objReg.OpenSubKey("Control Panel\Desktop")
$objRegKey.GetValue("ScreenSaveTimeOut")

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.