Solved

POwershell - How to pull the screen saver time out value

Posted on 2013-11-04
9
1,409 Views
Last Modified: 2013-11-15
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
0
Comment
Question by:MilesLogan
  • 4
  • 3
  • 2
9 Comments
 
LVL 14

Expert Comment

by:Giovanni Heward
ID: 39622171
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
 
LVL 2

Author Comment

by:MilesLogan
ID: 39622181
Hi x66_x72_x65_x65 ..  where do I enter the machine(s) to check ?
0
 
LVL 14

Expert Comment

by:Giovanni Heward
ID: 39622190
As written, the script is designed to run locally.  You can deploy it via GPO.
0
 
LVL 40

Accepted Solution

by:
Subsun earned 500 total points
ID: 39622198
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
 
LVL 2

Author Comment

by:MilesLogan
ID: 39622254
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
 
LVL 40

Expert Comment

by:Subsun
ID: 39622283
Are you seeing it for the same user which GPO is applied? Is it reporting wring time for all computers?
0
 
LVL 2

Author Comment

by:MilesLogan
ID: 39622555
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
 
LVL 40

Expert Comment

by:Subsun
ID: 39623822
I will test and let you know as soon as I can..
0
 
LVL 40

Expert Comment

by:Subsun
ID: 39651195
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

Join & Write a Comment

The recent Microsoft changes on update philosophy for Windows pre-10 and their impact on existing WSUS implementations.
A procedure for exporting installed hotfix details of remote computers using powershell
This tutorial will give a short introduction and overview of Backup Exec 2012 and how to navigate and perform basic functions. Click on the Backup Exec button in the upper left corner. From here, are global settings for the application such as conne…
This tutorial will walk an individual through the steps necessary to join and promote the first Windows Server 2012 domain controller into an Active Directory environment running on Windows Server 2008. Determine the location of the FSMO roles by lo…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now