我有一个 Powershell 脚本 (1),它收集戴尔系统的保修信息并将其显示在屏幕上。我还有第二个脚本 (2) 用于创建 WMI 命名空间和 (3) 用于类。我试图做的是让保修脚本收集的信息最终出现在 WMI 类中,这样我们就可以通过 SCCM 来获取它。下面的代码是我到目前为止所拥有的。任何帮助将不胜感激。(1)
{
$service = New-WebServiceProxy -Uri http://{143.166.84.118}/services/assetservice.asmx?WSDL
if($args.count -ne 0){
$serial = $args[0]
}
else {
$system = Get-WmiObject win32_SystemEnclosure
$serial = $system.serialnumber
}
$guid = [guid]::NewGuid()
$info = $service.GetAssetInformation($guid,'check_warranty.ps1',$serial)
if($info.count -eq 0)
{
Write-Host "Machine is not a Dell"
}
else
{
$warranty = $info[0].Entitlements[0]
$expires = $warranty.EndDate
$days_left = $warranty.DaysLeft
if($days_left -eq 0)
{
Write-Host "Warranty has expired"
}
else{
`enter code here`
set objwmiservice = getobject("winmgts:\\computer\root\warranty")
set colitems = objwmiservice.execquery("select * from warranty_warranty")
objitem.Warranty = $expires
objitem.put_
next
Write-Host "Warranty expires $expires."
Write-Host "Warranty is valid for $days_left days."
}
}
}
(2)
'Create namespace
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root")
Set objItem = objWMIService.Get("__Namespace")
Set objNamespace = objItem.SpawnInstance_
objNamespace.Name = "Warranty"
objNamespace.Put_ '
(3)
' $newClass = New-Object System.Management.ManagementClass `
("root\Warranty", [String]::Empty, $null);
$newClass["__CLASS"] = "Warranty";
$newClass.Qualifiers.Add("Static", $true)
$newClass.Properties.Add("Warranty", `
[System.Management.CimType]::String, $false)
$newClass.Properties["Warranty"].Qualifiers.Add("Key", $true)
$newClass.Put()'`enter code here`