禁用关闭此设备以节省NIC电源

时间:2017-09-10 20:50:07

标签: powershell

$NICs = Get-WmiObject Win32_NetworkAdapter -filter "AdapterTypeID = '0' AND PhysicalAdapter = 'true' AND NOT Description LIKE '%wireless%' AND NOT Description LIKE '%virtual%' AND NOT Description LIKE '%WiFi%' AND NOT Description LIKE '%Bluetooth%'"
Foreach ($NIC in $NICs)
{
    $powerMgmt = Get-WmiObject MSPower_DeviceEnable -Namespace root\wmi | where {$_.InstanceName -match [regex]::Escape($nic.PNPDeviceID)}
    If ($powerMgmt.Enable -eq $True)
    {
         $powerMgmt.Enable = $False
         $powerMgmt.psbase.Put()
    }
}

我有这个代码,我工作,但PSAnalyzer说 "对于PowerShell 3.0及更高版本,请使用CIM cmdlet执行与WMI cmdlet相同的任务。 CIM cmdlet符合WS-Management(WSMan)标准和公共信息模型(CIM)标准,该标准使cmdlet能够使用相同的技术来管理Windows计算机和运行其他操作系统的计算机。" 如何使用CIM cmdlet重写它?

5 个答案:

答案 0 :(得分:2)

这样的事应该对你有用。

foreach ($NIC in (Get-NetAdapter -Physical)){
    $PowerSaving = Get-CimInstance -ClassName MSPower_DeviceEnable -Namespace root\wmi | ? {$_.InstanceName -match [Regex]::Escape($NIC.PnPDeviceID)}
    if ($PowerSaving.Enable){
        $PowerSaving.Enable = $false
        $PowerSaving | Set-CimInstance
    }
}

答案 1 :(得分:1)

通过“ Get-NetAdapter -Physical”,我们可以获得所有物理适配器。并通过管道获取其“ NetAdapterPowerManagement('Get-NetAdapterPowerManagement')”。有一个属性AllowComputerToTurnOffDevice负责按钮“关闭此设备以节省功率”按钮。最后,我们将其设置为“已禁用”。

$adapter = Get-NetAdapter -Physical | Get-NetAdapterPowerManagement
$adapter.AllowComputerToTurnOffDevice = 'Disabled'
$adapter | Set-NetAdapterPowerManagement

答案 2 :(得分:1)

这对我有用:

 $adapters = Get-NetAdapter -Physical | Get-NetAdapterPowerManagement
    foreach ($adapter in $adapters)
        {
        $adapter.AllowComputerToTurnOffDevice = 'Disabled'
        $adapter | Set-NetAdapterPowerManagement
        }

答案 3 :(得分:0)

我知道这是一个古老的讨论,但是在通常的情况下,我偶然发现它是在寻找其他人如何解决我刚刚解决的问题。就我而言,我在远程系统上工作,因此包含了-CimSession参数,但这是我想到的:

$ComputerName = "SomeComputer"
Get-NetAdapter -CimSession $ComputerName -Physical |
Get-NetAdapterPowerManagement |
ForEach-Object{
    $_.AllowComputerToTurnOffDevice = 'Disabled' 
    $_ | Set-NetAdapterPowerManagement
}

尽管我确实在Cim会话中观察到一个非常短暂的断开连接,但是上面的代码工作得很好。也就是说,我其他屏幕上的RDP会话甚至都没有退缩。但是,如果您担心的话,您可能会在Start-Sleep行之后添加Set-NetAdapterPowerManagement命令。

我这样做是为了完成一份单独的工作,所以我不再为建立它而烦恼。

我还要补充一点,如果配置了NIC分组,则可能还有其他问题。在我的测试案例中,我有4个NIC,其中2个已启用,并且在团队的一部分中,其中2个已禁用。

Get-NetAdapter | Format-Table -AutoSize

# Output:

Name       InterfaceDescription                         ifIndex Status      MacAddress        LinkSpeed
----       --------------------                         ------- ------      ----------        ---------
Ethernet 4 HP Ethernet 1Gb 4-port 331FLR Adap...#4           15 Not Present AC-16-2D-71-F7-DF     0 bps
Ethernet   HP Ethernet 1Gb 4-port 331FLR Adap...#3           12 Up          AC-16-2D-71-F7-DE    1 Gbps
Ethernet 2 HP Ethernet 1Gb 4-port 331FLR Adap...#2           13 Disabled    AC-16-2D-71-F7-DD    1 Gbps
Ethernet 3 HP Ethernet 1Gb 4-port 331FLR Adapter             14 Up          AC-16-2D-71-F7-DC    1 Gbps
TEAM 0     Microsoft Network Adapter Multiplexor Driver      18 Up          AC-16-2D-71-F7-DC    1 Gbps

显然有4个端口被视为独立适配器,但是在添加-Physical参数时要查看结果:

Get-NetAdapter -Physical | Format-Table -AutoSize

# Output:
Name       InterfaceDescription                    ifIndex Status   MacAddress        LinkSpeed
----       --------------------                    ------- ------   ----------        ---------
Ethernet   HP Ethernet 1Gb 4-port 331FLR Adap...#3      12 Up       AC-16-2D-71-F7-DE    1 Gbps
Ethernet 2 HP Ethernet 1Gb 4-port 331FLR Adap...#2      13 Disabled AC-16-2D-71-F7-DD    1 Gbps
Ethernet 3 HP Ethernet 1Gb 4-port 331FLR Adapter        14 Up       AC-16-2D-71-F7-DC    1 Gbps

我正在猜测,但是看起来好像成组使用了#4适配器,即使它被禁用了。这让我有些不舒服,也许是进行更多研究的依据。但是,我要说的是,无论如何,对支持的适配器运行最高代码只对它们有效,因此即使在成组的服务器上,我也能达到预期的效果,并且没有发现任何其他副作用。

答案 4 :(得分:0)

我使用了本文中的出色示例来解决仅在无线适配器上禁用省电模式的请求。它仅过滤无线适配器,并显示找到的每个实例的结果。我在用户界面中更改的设置位于>>设备管理器>网络适配器> 无线适配器>属性>电源管理> 清除复选框-允许计算机关闭此设备以节省电量

# List all available properties in NetAdapter cmdlets
Get-NetAdapter | Get-Member | Format-Table
Get-NetAdapterPowerManagement | Get-Member | Format-Table

# Find Wireless adapter and disable power save mode
Get-NetAdapter -Physical | `
Where-Object {$_.InterfaceDescription -like "*Wireless*" `
  -or $_.interfaceName -like "*wireless*" `
  -or $_.Name -eq "Wi-Fi" `
  -or $_.PhysicalMediaType -like "*802.11*"} | `
Get-NetAdapterPowerManagement | `
ForEach-Object {
    $_.AllowComputerToTurnOffDevice = 'Disabled' 
    $_ | Set-NetAdapterPowerManagement
   ( Get-NetAdapterPowerManagement | `
     Where-Object {$_.InterfaceDescription -like "*Wireless*" `
    -or $_.Name -eq "Wi-Fi"} | `
    Format-List -Property Name,InterfaceDescription,AllowComputerToTurnOffDevice) 
    }