我的 PowerShell 脚本出现“无效类”错误

我的 PowerShell 脚本出现“无效类”错误

当我运行此脚本时,出现此错误

Get-WmiObject:无效类“Msvm_ImageManagementService”

Get-WmiObject:无效类“MSPower_DeviceEnable”

Get-WmiObject:无效类“MSPower_DeviceWakeEnable”

上述错误仅在某些计算机上发生,在其他计算机上不会发生。

$computerlist = Get-Content F:\Code\powershell\network_shutdown\computer-list.csv

foreach ($computer in $computerlist) 
{
    # Main Processing Section
    # Write-Host $computer
    if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet))
    {
        Write-Host $computer
        Write-Host "Disable `"Allow the computer to turn off this device to save power`""
        Get-WmiObject -computername $computer Win32_NetworkAdapter -filter "AdapterTypeId=0" | % {
            $strNetworkAdapterID=$_.PNPDeviceID.ToUpper()
            Get-WmiObject -class MSPower_DeviceEnable -computername $computer -Namespace $namespace | % {
                if($_.InstanceName.ToUpper().startsWith($strNetworkAdapterID))
                {
                    $_.Enable = $false
                    $_.Put() | Out-Null
                }
            }
        }

        Write-Host "Disable `"Allow this device to wake the computer`""
        Get-WmiObject -computername $computer Win32_NetworkAdapter -filter "AdapterTypeId=0" | % {
            $strNetworkAdapterID=$_.PNPDeviceID.ToUpper()
            Get-WmiObject -class MSPower_DeviceWakeEnable -computername $computer -Namespace $namespace | % {
                if($_.InstanceName.ToUpper().startsWith($strNetworkAdapterID)){
                    $_.Enable = $false
                    $_.Put() | Out-Null
                }
            }
        }

        Write-Host "Disable `"Only allow a magic packet to wake the computer`""
        Get-WmiObject -computername $computer Win32_NetworkAdapter -filter "AdapterTypeId=0" | % {
            $strNetworkAdapterID=$_.PNPDeviceID.ToUpper()
            Get-WmiObject -class MSNdis_DeviceWakeOnMagicPacketOnly -computername $computer -Namespace $namespace | % {
                if($_.InstanceName.ToUpper().startsWith($strNetworkAdapterID)){
                    $_.EnableWakeOnMagicPacketOnly = $false
                    $_.Put() | Out-Null
                }
            }
        }
    } else {
        Write-Host $computer + " OFFLINE"
        $output = new-object psobject
        $output | Add-Member noteproperty ComputerName $computer

        $array += $output
    }

    $array | Export-Csv -Path F:\Code\powershell\network_shutdown\Results.csv
}

我如何修复命名空间以便可以定位所有计算机?

我的错误日志也不起作用。我该怎么做才能将 OFFLINE、FAILED 和 SUCCESS 放入 CSV 文件中?(我知道在上面的代码中,我只捕获了离线的,但这也不起作用)

我得到以下

方法调用失败,因为 [System.Management.Automation.PSObject] 不包含名为“op_Addition”的方法。

代码在 Windows 7 上运行

PowerShell 版本

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

答案1

Get-WmiObject:无效类“Msvm_ImageManagementService”

此类由Hyper-V WMI 提供程序。如果目标计算机上未安装 Hyper-V 或 Hyper-V 管理工具,则不会出现此类

Get-WmiObject:无效类“MSPower_*”

微软电源超类尚未得到官方支持,并且派生的_设备*除非安装的网络适配器支持 LAN 唤醒,否则不会公开类

方法调用失败,因为 [System.Management.Automation.PSObject] 不包含名为“op_Addition”的方法。

可能是由以下行引起的:

$array += $output

如果$array尚不存在,PowerShell 无法自动推断您希望它是一个PSObjects 数组 - PowerShell 然后尝试使用“加法运算符”右侧的对象类型(+),并且由于PSObject不支持这样的操作而正确失败。

在脚本开始处添加以下内容:

$array = @()

要初始化一个空数组,或使用显式转换指示所需的类型:

[PSObject[]]$array += $output

相关内容