代码改变世界

PowerShell2.0之桌面计算机维护(三)设置屏幕保护程序

2011-01-09 01:04  @天行健中国元素  阅读(2047)  评论(0编辑  收藏  举报

Windows系统需要针对图形界面设置有关选项,如屏幕保护程序、桌面及电源设置等。尽管有很多用户通过组策略方式配置这些选项,但是对于尚未部署活动目录(Active Directory)的企业还是在使用默认的组策略对象,为需要通过PowerShell实现这些功能。

设置桌面选项时首先要注意PC是否配置了屏幕保护程序,在处理屏幕保护程序时需要考虑系统的性能。如在服务器上不必使用复杂的3D场景作为屏幕保护程序,因为这样既耗费服务器的资源,又没有多大意义;此外需要注意安全问题,因为有些屏幕保护程序会联系外部服务器更新配置并报告用户操作习惯。如果更新过程被恶意操控,将会给服务器的安全带来很大威胁。如果为负载多个不同用户网站的Web服务器设置的权限不合适,恶意用户可以用更名后的木马程序替换原有屏幕保护程序。从而借助屏幕保护程序在达到启动时间后启动木马,并且逐步提升权限控制整台服务器。

创建名为“AuditScreenSaver.ps1”的脚本检查特定计算机中的屏幕保护程序是否显示适当内容,同时检测其名称、等待时间,以及是否安全。其代码如下:

param($computer="localhost", $help)

function funline ($strIN)

{

$num = $strIN.length

for($i=1 ; $i -le $num ; $i++)

{ $funline += "=" }

Write-Host -ForegroundColor yellow `n$strIN

Write-Host -ForegroundColor darkYellow $funline

}

function funHelp()

{

$helpText=@"

DESCRIPTION:

NAME: AuditScreenSaver.ps1

Prints screensaver config on a local or remote machine.

PARAMETERS:

-computerName Specifies the name of the computer upon which to run the script

-help prints help file

SYNTAX:

AuditScreenSaver.ps1 -computer WebServer

Lists screensaver configuration on a computer named WebServer

AuditScreenSaver.ps1

Lists screensaver configuration on local computer

AuditScreenSaver.ps1 -help ?

Displays the help topic for the script

"@

$helpText

exit

}

if($help){funline("Obtaining help ...") ; funhelp }

$username = (get-wmiobject -class win32_computersystem `

-computername $computer).username

$index=$username.indexof("\")

$username=$username.substring($index+1)

$screensaver = Get-WmiObject -Class win32_desktop `

-computername $computer -filter "name like `"%$($username)`"" |

Select-Object -Property screen*, name

funline("Screen saver configuration for $($screensaver.name)")

if($screensaver.ScreenSaverActive -eq "true")

{

Write-Host "The screensaver is: $($screensaver.screensaverExecutable)"

Write-Host "Secure Screensaver: $($screensaver.ScreenSaverSecure)"

Write-Host "Screensaver timeout: $($screensaver.ScreenSaverTimeout)"

}

ELSE

{ Write-Host "$($screensaver.name) does not have a screen saver"}

该脚本首先使用param语句定义了两个输入参数,其中$computer指定运行该脚本的计算机,默认值为localhost,即本机;$help指定是否显示帮助信息。然后定义funline函数,用于为传递的字符串添加下画线,为用户提供更好的视觉反馈。该函数会判断传递的字符串的长度,它决定了需要使用多少个等号(=)连接,通过这种方式等号组成的字符串的长度可以等于输出字符串的长度。

接下来定义了一个funhelp函数用于在用户未输入相关参数或输入了错误参数时提示用户按照脚本描述和语法输入正确的参数。这个脚本可以远程运行,但是需要获取当前登录的用户名称。为此可以使用Get-WmiObject cmdlet并通过Win32_ComputerSystemWMII类获取UserName属性,此处使用-computername参数并提供$computer变量中的数值。

随后使用Get-WmiObject cmdlet查询Win32_Desktop WMI类,这时可以使用-computername参数使脚本以远程计算机为目标运行。如果如图33所示关闭屏幕保护程序,而且尚未重启系统,则无法更新该屏幕保护程序的属性值,因为当前配置的注册表键值只有在系统重启后才会生效。

image

图1 关闭屏幕保护程序

如果ScreenSaverActive的属性为True,则输出可执行文件的路径,在其中可以看到当前屏幕保护程序设置的等待时间。这个等待时间以秒为单位,因此默认的10分钟显示为600。

此脚本的执行结果如图34所示。

image

图2 执行结果

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.lzuer.com/