我希望自动设置Windows 7在我的工作笔记本电脑上关闭盖子时所采取的操作,因为每次登录时都会通过GPO重置.
我知道我可以在批处理脚本中使用powercfg命令来实现这个目的:
powercfg -setacvalueindex 5ca83367-6e45-459f-a27b-476b1d01c936 0 powercfg -setdcvalueindex 5ca83367-6e45-459f-a27b-476b1d01c936 0
然而,这是尝试学习一些PowerShell的一个很好的借口.我的第一次尝试需要10秒以上才能运行.
在运行时和运行方面,我如何改进以下内容?在清洁代码方面.接近下面的惯用PowerShell方法是什么?
$DO_NOTHING = 0 $activePowerPlan = Get-WmiObject -Namespace "root\cimv2\power" Win32_PowerPlan | where {$_.IsActive} $rawPowerPlanID = $activePowerPlan | select -Property InstanceID $rawPowerPlanID -match '\\({.*})}' $powerPlanID = $matches[1] # The .GetRelated() method is an inefficient approach,i'm looking for a needle and this haystack is too big. Can i go directly to the object instead of searching? $lidCloseActionOnACPower = $activePowerPlan.GetRelated("win32_powersettingdataindex") | where {$_.InstanceID -eq "Microsoft:PowerSettingDataIndex\$powerPlanID\AC\{5ca83367-6e45-459f-a27b-476b1d01c936}"} $lidCloseActionOnBattery = $activePowerPlan.GetRelated("win32_powersettingdataindex") | where {$_.InstanceID -eq "Microsoft:PowerSettingDataIndex\$powerPlanID\DC\{5ca83367-6e45-459f-a27b-476b1d01c936}"} $lidCloseActionOnACPower | select -Property SettingIndexValue $lidCloseActionOnACPower.SettingIndexValue = $DO_NOTHING $lidCloseActionOnACPower.put() $lidCloseActionOnBattery | select -Property SettingIndexValue $lidCloseActionOnBattery.SettingIndexValue = $DO_NOTHING $lidCloseActionOnBattery.put()
试试WMI加速器:
原文链接:https://www.f2er.com/windows/372045.html$class = ([wmi] '\root\cimv2\power:Win32_PowerSettingDataIndex.InstanceID="Microsoft:PowerSettingDataIndex\\{8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c}\\DC\\{5ca83367-6e45-459f-a27b-476b1d01c936}"') $class.SettingIndexValue = 0 $class.Put()