Question [RESOLU] Conversion table sql en psobject
- Selenae
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 11
- Remerciements reçus 0
Je dois exécuter plusieurs fois des requests SQL pour des checks et j'aimerais exploiter les resultats en psobject pour plus de facilité.
Voici le script que j'utilise pour me connecter a la DB =>
[code:1]
function sql_to_hash ([string]$query){
$Database = \"*********\"
$Server = \"******\"
$pwd = \"*****\"
$Username = \"**********\"
# Connect to SQL and query data, extract data to SQL Adapter
$SqlQuery = $query
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = \"Data Source=$Server;Initial Catalog=$Database;Trusted_Connection=False;User Id=$Username;Password=$pwd\"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null
#Populate Hash Table
$objTable = $DataSet.Tables[0]
$objTable
}
[/code:1]
Ensuite j'aimerais convertir le retour de ma fonction ( $objTable ) en objet pwshell
[code:1]
$object = New-Object psobject -Property $objTable
[/code:1]
Seulement j'ai ce message
[code:1]New-Object : Cannot bind parameter 'Property'. Cannot convert the \"Table\" value of type \"System.Data.DataTable\" to type \"System.Collections.Hashtable\".
At line:1 char:40
+ $object = New-Object psobject -Property <<<< $objTable
+ CategoryInfo : InvalidArgument: (:«») [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewObjectCommand[code/][/code:1]
Pourriez vous me dire si il existe une méthode pour convertir un objet \"System.Data.DataTable\" en \"System.Collections.Hashtable\" ?
Merci d'avance de votre aide
Message édité par: Selenae, à: 25/05/10 15:29
Message édité par: Selenae, à: 25/05/10 15:30<br><br>Message édité par: Selenae, à: 27/05/10 07:20
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
- Messages : 226
- Remerciements reçus 0
[code:1]$object = New-Object psobject
$object = $objTable
[/code:1]
Enfin cela dépend du résultat que tu as...si c'est juste une table par exemple le code ci dessus devrait suffire amplement.
EDIT : sinon regarde ici :
blogs.msdn.com/b/powershell/archive/2009...perty-hashtable.aspx
Message édité par: bilbao, à: 25/05/10 15:50
Connexion ou Créer un compte pour participer à la conversation.
- Selenae
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 11
- Remerciements reçus 0
Tes deux lignes de code ont bien reglé mon probleme
Je pensait que la commande New-Object psobject devait obligatoirement prendre sa table de hash via la propriété -Property.
Merci
bilbao écrit:
J'ai pas trop saisi le résultat de ta fonction mais as tu essayé ca?
[code:1]$object = New-Object psobject
$object = $objTable
[/code:1]
Enfin cela dépend du résultat que tu as...si c'est juste une table par exemple le code ci dessus devrait suffire amplement.
EDIT : sinon regarde ici :
blogs.msdn.com/b/powershell/archive/2009...gt;<br>Message édité par: bilbao, à: 25/05/10 15:50
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
- Messages : 226
- Remerciements reçus 0
(Enfin je dit ca de tête vite fait, j'ai à peine regardé le man )
cf: \"man New-object -full\".
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
C'est plutôt, le paramètre -Property de la commande New-Object qui attend une hashtable pour initialiser les propriétés de l'objet créé.Je pensait que la commande New-Object psobject devait obligatoirement prendre sa table de hash via la propriété -Property.
Si tu veux créer une hashtable à partir d'un objet tu peux faire ceci:
[code:1]
function ConvertTo-Dictionary ([ScriptBlock]$KeyExpression,[ScriptBlock]$ValueExpression={$_}) {
#http://einsteintech.spaces.live.com/blog/cns!89E05724AF67A39E!228.entry
#
#Example :
#$Services = Get-Service | ConvertTo-Dictionary {$_.Name} {$_.DisplayName}
#$Services
begin { $Result = @{} }
process { $Result[(&$KeyExpression)]=(&$ValueExpression) }
end { $Result }
}
$F=dir
$H=$F[0] |GM -MemberType *Property -Name *| ConvertTo-Dictionary {$_.Name} {$F[0].\"$($_.Name)\"}
[/code:1]
Tu peux trouver d'autres solutions sur le net.
Pour récupérer uniquement les propriétés d'un objet dans un autre objet :
[code:1]$o=$F[0]|Select *
$o.Gettype()
$O|gm[/code:1]
Toutes les propriétés du nouvel objet sont désormais du type NoteProperty.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Selenae
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 11
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- [RESOLU] Conversion table sql en psobject