Question
Script avec Access en sortie
- edouard
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 9
- Remerciements reçus 0
j'aurai besoin d'un coup de pouce,
j'ai donc un script qui me fait un inventaire
(inspiré par un des script de la bibliothèque:whistle:) ,
il faudrait que le résultat du dit script écrive directement dans une base access.
voici une version simplifié du script inventaire (pour ne pas trop chargé la page)
[code:1]
function Get-ComputerInfo {
param ($computer = \".\"«»)
# Création de la Variable résultat
# (Ajoutez ici d'autres propriétés)
$result = \"\" | Select-Object Nom,Model,Serial
# Commandes de la variable résultats:
$result.Nom = (Get-WmiObject win32_computersystem -computerName $computer).name
$result.Serial = (Get-WmiObject win32_bios -computerName $computer).SerialNumber
$result.Model = (Get-WmiObject win32_computersystem -computerName $computer).model
# return the result:
$result
}
get-content parc.txt |
foreach {Get-ComputerInfo $_}
[/code:1]
J'ai donc le scipt de connexion a une base access,
(qui fonctionne j'arrive bien a récuperer le contenu avec powershell )
[code:1]
# Pour une base Access nul besoin d'avoir Access d'installer sur le poste
# La couche d'accés ADO.NET est installé par défaut via le runtime de .NET
$FileName=\"C:\Script\Vxp1invent.mdb\"
$NomTable=\"Inventaire\"
$StrConnexion=\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$FileName\"
$Connexion = new-object System.Data.OleDb.OleDBConnection($StrConnexion)
# On Doit impérativement récupèrer toutes les colonnes de toutes les lignes sinon
# on obtient soit une erreur soit on ne récupére aucune donnée
$Requete = \"Select * From Inventaire\"
$cmd = New-object System.Data.OleDb.OleDbCommand($Requete,$Connexion)
$DataAdapter = new-object System.Data.OleDB.OleDBDataAdapter($cmd)
$DataSet = new-object System.Data.DataSet
[void]$DataAdapter.Fill($DataSet)
$Connexion.Close()
[/code:1]
est il envisageable de faire une requete qui prenne ma variable $result et remplisse ma table inventaire
Merci infiniment à ceux qui pourront m'aidé
Message édité par: eddy, à: 12/11/09 14:34<br><br>Message édité par: eddy, à: 12/11/09 14:36
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
eddy écrit:
Oui, mais en construisant une requête Insert à partir des membres de l'objets $result.est il envisageable de faire une requete qui prenne ma variable $result et remplisse ma table inventaire
Il n'est pas possible sans cmdlet/code additionnel de faire un :
[code:1]Insert $Result INTO Inventaire[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- edouard
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 9
- Remerciements reçus 0
Oui, mais en construisant une requête Insert à partir des membres de l'objets $result.
Tu veut dire qu'il faut que je fasse un Insert pour chaque
$result.Nom
$result.serial
etc
??
(beh oui je débute vraiment ! Mais promis j'me soigne)<br><br>Message édité par: eddy, à: 12/11/09 16:40
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Oui tout à fait. Comme tout traitement SQL.Tu veut dire qu'il faut que je fasse un Insert pour chaque $result.Nom $resul.serial etc
Ensuite cela dépend de tes régles de gestion soit tu inséres au fur et à mesure de la collecte soit une fois toutes les infos collectées et ce au sein d'une transaction.
eddy écrit:
Etre débutant n'est pas une maladie, il faut bien commencer par le commencementbeh oui je débute vraiment ! Mais promis j'me soigne
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- edouard
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 9
- Remerciements reçus 0
bon j'ai récupe le trial de \"AdminScripEditor\" qui à une interface graphique plutot sympa pour faire du script et qui m'a notament pondue une requete toute faite avec la connexion qui devrait allé bien;
le seul probleme c'est que l'insert marche pas ....
est ce que ma variable $result est accessible en dehors de la fonction ?
ou alors est ce la requete/ connexion BDD qui marche pas ??
Bon si ça vous arrache les yeux je peu réduire la taille du script pour que ça remplisse un peu moins la page
[code:1]
function Get-ComputerInfo
{
param($computer = \".\")
# Création de la Variable résultat
# (Ajoutez ici d'autres propriétés)
$result = \"\" | Select-Object Nom, Serial, Utilisateur
# Commandes de la variable résultats:
$result.Nom = (Get-WmiObject win32_computersystem -computerName $computer).name
$result.Utilisateur = (gwmi win32_computerSystem -computerName $computer).username
$result.Serial = (Get-WmiObject win32_bios -computerName $computer).SerialNumber
# return the result:
$result
}
Get-computerinfo
$cnstring = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Script\Vxp1invent.mdb;Mode=ReadWrite'
$cmdtext = \"INSERT INTO Inventaire (serial,Nom, Utilisateur )
VALUES('\" + $result.Nom + \"',
'\" + $result.Serial + \"',
'\" + $result.Utilisateur + \"') \"
$cn = New-Object System.Data.OleDb.OleDbConnection $cnstring
$cn.Open()
$cmd = New-Object System.Data.OleDb.OleDbCommand $cmdtext, $cn
$cmd.ExecuteNonQuery()
$cn.Close()
[/code:1]<br><br>Message édité par: eddy, à: 13/11/09 13:48
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
eddy écrit:
Non mais tu l'émets dans le pipeline, tu dois donc la récupérer dans une variable ou une instruction utilisant le pipeest ce que ma variable $result est accessible en dehors de la fonction ?
eddy écrit:
Sa construction me semble correct mais sans accès à $result son contenu sera tjr faux.ou alors est ce la requete/ connexion BDD qui marche pas ??
[code:1]
function Get-ComputerInfo
{
param($computer = \".\"«»)
$result = \"\" | Select-Object Nom, Serial, Utilisateur
# Commandes de la variable résultats:
$Info=Get-WmiObject Win32_ComputerSystem -computerName $computer -property Name,Username
$result.Nom = $Info.Name
$result.Utilisateur = $Info.Username
$result.Serial = (Get-WmiObject win32_bios -computerName $computer -property SerialNumber).SerialNumber
# return the result:
$result
}
$Result = Get-ComputerInfo
$cmdtext = \"INSERT INTO Inventaire (Nom, Serial, Utilisateur ) VALUES ('{0}', '{1}', '{2}')\" -F $result.Nom, $result.Serial, $result.Utilisateur
$DataSource=\"C:\Script\Vxp1invent.mdb\"
$cnstring = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$DataSource;Mode=ReadWrite\"
...
[/code:1]
Tu devrais paramètrer ta chaîne de connexion, et pour WMI préciser les propriétés que tu comptes utiliser, cela soulagera le réseau.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Script avec Access en sortie