Liest man in einem Powershell Script Systemobjekte aus WMI aus, z.B. die MAC Adresse eines Netzwerkadapters und versucht man dann, diese Adresse einer SQL Stored Procedure zu übergeben, damit diese in eine Datenbank gespeichert wird, dann erhält man bei der Ausführung des ExecuteNonQuery die Fehlermeldung
No mapping exists from object type System.String[] to a known managed provider native type.
Problem ist dabei die Flexibilität der Powershell, denn eine Zuweisung der Art
$scnMAC = $objItem.MACAddress
weist nicht den String der MAC Adresse der Variablen scnMAC zu, sondern das komplette Objekt. Dieses aber kann man nicht in ein nvarchar Feld einer Stored Procedure übergeben:
$cmd.Parameters.Add(“@scnMAC”,$scnMAC)
das ergibt den genannten Fehler. Lösung ist, das Objekt bei der Zuweisung in einen String zu verwandeln, Powershell typisch mit einer Pipe
$scnMAC = $objItem.MACAddress | Out-String
und schon enthält die Variable scnMAC den String mit der MAC Adresse anstelle des Objektes.