2012-03-30 6 views
2

Ich versuche, Informationen über den lokalen Computer in eine XML-Datei gespeichert zu speichern. Alles scheint gut zu laufen, aber ich bekomme diesen Fehler, weil Strings nur als XmlNode-Eigenschaften definiert werden können, aber zum Beispiel:String Fehler beim Speichern von Variablen in Xml

Irgendwelche Ideen, wie man es löst?

PS C:\Users\Hkon> $newdrive.name = $_.name 

Ergebnisse in diesem Fehler:

Cannot set "name" because only strings can be used as values to set XmlNode properties. 
At line:1 char:11 
+ $newdrive. <<<< name = $_.name 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : PropertyAssignmentException 

Hier ist mein Code:

$template = "<computer version='1.0'> 
    <hardware> 
     <serialnr>$serialnr</serialnr> 
     <systeminfo> 
      <name></name> 
      <domain></domain> 
      <manufacturer></manufacturer> 
      <model></model> 
      <bitversion></bitversion> 
     </systeminfo> 
     <usb> 
      <model></model> 
     </usb> 
     <drive> 
      <name></name> 
      <volumename></volumename> 
      <size></size> 
      <freespace></freespace> 
     </drive> 
     <memory> 
      <positioninrow></positioninrow> 
      <capacity></capacity> 
      <datawidth></datawidth> 
      <devicelocator></devicelocator> 
     </memory> 
     <gpu> 
      <name>$gpu</name> 
      <status>$status</status> 
     </gpu> 
     <cpu> 
      <name></name> 
      <manufacturer></manufacturer> 
      <id></id> 
      <numberofcores></numberofcores> 
      <addresswidth></addresswidth> 
     </cpu> 
    </hardware> 
    <software> 
     <printer> 
      <id></id> 
      <drivername></drivername> 
      <portname></portname> 
     </printer> 
     <allusers> 
      <user> 
       <name></name> 
      </user> 
     </allusers> 
     <osinfo> 
      <caption></caption> 
      <serialnr></serialnr> 
      <bitversion></bitversion> 
      <installdate>$NormalDateTime</installdate> 
      <manufacturer></manufacturer> 
     </osinfo> 
    </software> 
</computer>" 

$template | out-File C:\Scripts\XML\info.xml 
$xml = New-Object xml 
$xml.Load("C:\Scripts\XML\info.xml") 

#Drive, hardware 
$newdrive = (@($xml.computer.hardware.drive)[0]) 

Get-WmiObject -Class Win32_logicaldisk | 
ForEach-Object { 
    $newdrive = $newdrive.clone() 
    $newdrive.name = $_.name 
    $newdrive.volumename = $_.volumename 
    $newdrive.size = $_.size 
    $newdrive.freespace = $_.freespace.toString() 
    $xml.computer.hardware.AppendChild($newdrive) > $null 
} 
$xml.computer.hardware.drive | where-object {$_.name -eq ""} | foreach-object {$xml.computer.hardware.RemoveChild($_)} 
$xml.computer.hardware.drive.Count 
+0

Wenn Sie $ _. Name | Get-Member, was ist der Typ? – EBGreen

+0

Ich denke, es ist $ null ... –

+0

Ich denke, dass Sie wahrscheinlich Recht haben. Könnte möglicherweise String [] oder eine andere Sammlung sein. – EBGreen

Antwort

3

ich diesen Code getestet haben (mit Ausnahme letzten 2 Zeilen), und ich habe zu werfen

$_volumename, $_.size, and $_.frespace 

als [string]

aber alle meine Bände bekam einen Namen (a: c: d: e: f: g: and so on...)

Kann sein, dass einige abgehängten Datenträger in dem System vorhanden ist, testen Sie?

Versuchen auch

$newdrive.name = [string]$_.name 

Hier das Ergebnis zu werfen nach Ausführungen der Codes Zugabe Besetzung:

zu [string] ohne die Darsteller

Powershell Console

Wo zurückkehren gwmi keinen Wert I Fehler hatten

Verwandte Themen