PowerShell2.0之桌面计算机维护(六)修改电源计划


Windows Vista和Windows Server 2008的电源计划有大量改进,可以针对使用电池或交流电供电的情况分别设置。如果当前计算机正在使用电池,那么续航时间是个需要关心的问题。而在某些情况下,计算机的性能才是最重要的。例如,如果电力会在几分钟之后恢复,则不必为延长电池使用时间而降低性能。在不同的电源计划下显示器、磁盘及CPU的电力消耗也不同,在Windows Server 2008系统中可以创建自定义的电源计划,如图1所示。

image

图1 创建自定义的电源计划

创建名为“SetPowerConfig.ps1”的脚本用于设置电源计划,代码如下:

param($c, $t, $q, $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: SetPowerConfig.ps1

Sets power config on a local machine.

PARAMETERS:

-c(hange) <mp,mb,dp,db,sp,sb,hp,hb>

-q(uery) detailed query of current power plan

-t(ime out) time out value for change. Required when using -c to change a value

-help prints help file

SYNTAX:

SetPowerConfig.ps1

Displays error message. Must supply a parameter

SetPowerConfig.ps1 -c mp -t 10

Sets time out value of monitor when on power to10 minutes

SetPowerConfig.ps1 -c mb -t 5

Sets time out value of monitor when on battery to 5 minutes

SetPowerConfig.ps1 -c dp -t 15

Sets time out value of disk when on power to 15 minutes

SetPowerConfig.ps1 -c db -t 7

Sets time out value of disk when on battery to 7 minutes

SetPowerConfig.ps1 -c sp -t 30

Sets time out value of standby when on power to 30 minutes

SetPowerConfig.ps1 -c sb -t 10

Sets time out value of standby when on battery to 10 minutes

SetPowerConfig.ps1 -c hp -t 45

Sets time out value of hibernate when on power to 45 minutes

SetPowerConfig.ps1 -c hb -t 15

Sets time out value of hibernate when on battery to 15 minutes

SetPowerConfig.ps1 -q c

Lists detailed configuration settings of the current power scheme

SetPowerConfig.ps1 -help ?

Displays the help topic for the script

"@

$helpText

exit

}

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

$computer = (New-Object -ComObject WScript.Network).computername

if($q)

{

funline("Power configuration on: $($computer)")

powercfg -query

exit

}

if($c -and !$t)

{

$(Throw ‘A value for $t is required.

Try this: SetPowerConfig.ps1 -help ?’)

}

switch($c)

{

"mp" { powercfg -CHANGE -monitor-timeout-ac $t }

"mb" { powercfg -CHANGE -monitor-timeout-dc $t }

"dp" { powercfg -CHANGE -disk-timeout-ac $t}

"db" { powercfg -CHANGE -disk-timeout-dc $t }

"sp" { powercfg -CHANGE -standby-timeout-ac $t }

"sb" { powercfg -CHANGE -standby-timeout-dc $t }

"hp" { powercfg -CHANGE -hibernate-timeout-ac $t }

"hb" { powercfg -CHANGE -hibernate-timeout-dc $t }

DEFAULT {

"$c is not allowed. Try the following:

SetPowerConfig.ps1 -help ?"

}

}

该脚本首先使用param语句定义了4个参数,即-c、-t、-q和-help。其中-q指定查询,-help指定输出帮助。-c和-t必须同时使用,因为-t值指定修改电源计划的参数超时值,如果该值为空,脚本执行将出错。该脚本使用WScript.Network对象获得本机的计算机名,因此可以使用New-Object cmdlet配合-comobject参数。通过小括号将这些内容括起作为一个对象,使用ComputerName属性并将结果保存在$computer变量中。

如果在脚本执行时提供了参数-q,那么会出现$q变量。这样可使用funline函数将计算机名作为标题输出,并使用Powercfg工具提供参数-query,从而得到本机当前的详细电源计划。

如果提供了参数-c,则必须使用参数-t。这是因为$t变量中包括的是时间信息,需要为-c参数中指定的操作指定有限的超时时间,这样才不会无限期地等待。如果仅有$c变量,则使用throw语句输出红色的错误信息,并停止脚本执行。

接下来脚本根据-c参数值匹配switch语句中的分支,如果值为mp,则使用包括在$t变量值作为交流电情况下的显示器超时时间的分钟数;如果值为mb,并且计算机在使用电池供电,则会使用$t变量值设置显示器的超时时间;如果值为db,则配置当前电源计划在达到$t变量设定的分钟数后关闭驱动器;如果值为sp,则在使用交流电的情况下当空闲时间超过$t变量设定的分钟数后计算机将会进入待机状态;如果需要计算机休眠,则使用hp,并修改用于交流电下休眠的电源计划值;如果使用hb,则为电池模式下的休眠值。

此脚本在Windows Server 2008和Windows XP下通过-q参数查询电源方案的结果如图2和图3所示。

image

图2 在Windows 2008中列出当前系统电源计划的详细方案

image

图3 在WindowsXP中获取到的电源计划的信息

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


发表回复