PowerShell2.0之桌面计算机维护(四)审核安全的屏幕保护程序


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

屏幕保护程序也有潜在的安全威胁,如果用户主机中存在大量的用户,则系统管理员逐个查看用户的屏幕保护程序设置是否安全,以及设置是否按照要求将会是个很繁重的任务。创建名为“AuditScreenSaverWriteToAccess.ps1”脚本用于获取和审核主机中所有用户在系统中的屏幕保护程序设置,并将结果写入名为ConfigurationMaintenance.mdb的Access数据库文件中。创建一个新表screensaver用于保存当前信息,其结构如1所示。

image

图1 screensaver表的结构

创建一个screensaver表,如图2所示。其中列出screensaver表中的所有信息,并计算使用屏幕保护程序用户的比例,同时指出使用的屏幕保护程序是否安全。

image

图2 screensaver表

该脚本的代码如下:

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: AuditScreenSaverWriteToAccess.ps1

writes secure screensaver config of a local or remote machine,

to an access database

PARAMETERS:

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

-help prints help file

SYNTAX:

AuditScreenSaverWriteToAccess.ps1 -computer WebServer

Writes secure screensaver configuration of a computer named WebServer

to an access database

AuditScreenSaverWriteToAccess.ps1

Writes secure screensaver configuration of local computer to an

access database

AuditScreenSaverWriteToAccess.ps1 -help ?

Displays the help topic for the script

"@

$helpText

exit

}

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

$adOpenStatic = $adLockOptimistic = 3

$strDB = "C:\PowerShell\CHAPTER18\Configurationmaintenance1.mdb"

$strTable = "screensaver"

$objConnection = New-Object -ComObject ADODB.Connection

$objRecordSet = new-object -ComObject ADODB.Recordset

$objConnection.Open("Provider = Microsoft.Jet.OLEDB.4.0; `

Data Source= $strDB")

$objRecordSet.Open("SELECT * FROM $strTable", `

$objConnection, $adOpenStatic, $adLockOptimistic)

write-host -foreGroundColor yellow "Obtaining screen saver info …"

$aryscreensaver = Get-WmiObject -Class win32_desktop `

-computername $computer `

-Property name, screensaversecure, screensavertimeout, `

__server, ScreenSaverActive

foreach( $screensaver in $aryScreensaver)

{

$objRecordSet.AddNew()

$objRecordSet.Fields.item("TimeStamp") = Get-Date

$objRecordSet.Fields.item("SystemName") = $($screensaver.name)

$objRecordSet.Fields.item("Executable") = $($screensaver.screensaverExecutable)

$objRecordSet.Fields.item("Secure") = $($screensaver.ScreenSaverSecure)

$objRecordSet.Fields.item("Active") = $($screensaver.ScreenSaverActive)

$objRecordSet.Fields.item("Timeout") = $($screensaver.ScreenSaverTimeout)

$objRecordSet.Update()

write-host -foregroundColor yellow "/\" -noNewLine

}

$objRecordSet.Close()

$objConnection.Close()

其中定义了控制打开Access数据库连接方式的$adOpenStatic和$adLockOptimistic两个变量并均赋值3,该值根据Windows SDK定义。然后将Configurationmaintenance.mdb数据库的路径赋给$strDB变量,并使用$strTable变量保存将要写入内容的表名,即该脚本中使用的screensaver表。为了使用脚本操作Access数据库,必须创建连接到数据库并更新表中信息的Connection和RecordSet对象。接下来打开与数据库的连接,需要提供Provider的名称,即Microsoft.Jet.OLEDB4.0 Provider,然后使用ADODB.Connection对象的Open方法打开$objConnection.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source= $strDB")。打开数据库连接后,使用RescordSet对象的Open方法打开记录集,并使用Write-Host cmdlet输出信息提示用户正在收集系统屏幕保护程序的信息。

为了通过WMI类收集屏幕保护程序的信息,使用Get-WmiObject cmdlet并选择Win32_Desktop WMI类。使用-computer参数通过$computer变量提供目标计算机的名称,并通过-property参数选择所需属性。然后使用foreach语句遍历上面通过WMI获取的屏幕保护程序,使用RecordSet为每个记录添加一条新记录,并且设置记录中每个字段的内容,最后使用RecordSet对象的Update()方法更新所有字段的内容。在添加每一条记录的过程中在控制台输出“/\”符号显示进度,foreach循环遍历所有记录后需要牢记使用各自的Close()方法关闭数据库的记录集RecordSet对象和连接Connection对象。

执行脚本之后打开数据库ConfigurationMaintenance.mdb文件,可以看到如图2所示的内容。

 

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


发表回复