2012-03-30 105 views
2

我試圖將收集到的有關本地計算機的信息保存到XML文件中。一切似乎運行良好,但我得到有關字符串只能被設置爲XmlNode屬性的錯誤,但例如:將變量保存到xml時出現字符串錯誤

有關如何解決它的任何想法?

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

導致此錯誤:

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 

這裏是我的代碼:

$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

如果你做$ _。Name | Get-Member,它是什麼類型的? – EBGreen 2012-03-30 13:58:17

+0

我想它是$ null ... – 2012-03-30 14:15:15

+0

我想你可能是對的。也可能是String []或其他集合。 – EBGreen 2012-03-30 14:18:08

回答

3

我已經測試此代碼(不包括最後2行),我要投

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

as [string]

但我所有的卷有一個名字(a: c: d: e: f: g: and so on...)

可以是一些卸載量存在於系統中,你的測試?

嘗試也投

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

在這裏,結果你的代碼執行後,將投:

Powershell Console

gwmi不投沒有返回值我有錯誤[string]

相關問題