このスクリプトを実行すると、このエラーが発生します
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」という名前のメソッドが含まれていないため、メソッドの呼び出しに失敗しました。
コードはWindows7で実行されています
PowerShellバージョン
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
Get-WmiObject:無効なクラス「Msvm_ImageManagementService」
このクラスは、 Hyper-V WMIプロバイダー によって公開されます。ターゲットマシンにHyper-VまたはHyper-V管理ツールがインストールされていない場合、このクラスは存在しません
Get-WmiObject:無効なクラス "MSPower _ *"
MSPowerスーパークラスは公式にはサポートされておらず、派生_ Device *クラスインストールされているネットワークアダプタがWake-on-LANをサポートしていない限り、公開されません
[System.Management.Automation.PSObject]に「op_Addition」という名前のメソッドが含まれていないため、メソッドの呼び出しに失敗しました。
次の行が原因である可能性があります。
$array += $output
$array
がまだ存在しない場合、PowerShellはそれをPSObject
sの配列にすることを自動的に推測できません-PowerShellは、右側のオブジェクトのタイプを使用しようとします。 「加算演算子」(+
)であり、PSObject
はそのような操作をサポートしていないため、正しく失敗します。
スクリプトの先頭に以下を追加します。
$array = @()
空の配列を初期化するには、または明示的なキャストで目的の型を指定するには:
[PSObject[]]$array += $output