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

  • 相关阅读:
    HDU 2041--超级楼梯(递推求解)
    HDOJ2037 今年暑假不AC (经典的贪心问题)
    JavaWeb---总结(十)HttpServletRequest对象(一)
    JavaWeb---总结(十一)使用Cookie进行会话管理
    JavaWeb---总结(十二)Session
    JavaWeb---总结(十三)使用Session防止表单重复提交
    JavaWeb---总结(十四)JSP原理
    JavaWeb---总结(十五)JSP基础语法
    JavaWeb---总结(十六)JSP指令
    JavaWeb---总结(十七)JSP中的九个内置对象
  • 原文地址:https://www.cnblogs.com/fuhj02/p/1931581.html
Copyright © 2020-2023  润新知