Question
[Résolu] Tableau de Hashtable
- SUSINI Vincent
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
il y a 15 ans 4 mois #8077
par SUSINI Vincent
[Résolu] Tableau de Hashtable a été créé par SUSINI Vincent
Bonjour,
Je souhaite lister les options des BDD oracles sur différents serveurs.
Pour cela, j'interroge à distance les bases de registres des serveurs et je remonte les informations dont j'ai besoin.
Cette partie la fonctionne bien, mais je souhaite renvoyer mon résultat dans une fenêtre plutôt que dans un fichier de log.
J'ai donc décidé d'envoyer le tout dans un GridView en espérant obtenir 5 colonnes avec mes résultats.
Avec un tableau de tableau, j'obtiens une seule colonne, et pas de titre. Du coup en cherchant un peu, je tombe sur les hashtable et je me dis que c'est la solution à mes problèmes.
ça donne ça:
[code:1]
Clear
# Initialisation des variables
$Liste_BDD =@()
# Les clefs necessaires à la récupération du SID et des options de bases
$key = \"SOFTWARE\ORACLE\SYSMAN\\"
$key2 = \"SOFTWARE\ORACLE\KEY_OraDb10g_home1\"
# Connection à distance sur la base de registre
$type = [Microsoft.Win32.RegistryHive]::LocalMachine
Foreach( $Srv IN ('Liste de mes serveurs') )
{
$regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $Srv)
$regKey1 = $regKey.OpenSubKey($key)
# Si la clef de registre existe Oracle est installé
if ( $regKey1.Name )
{
Foreach($sub in $regKey1.GetSubKeyNames())
{
$regKey2=$regKey1.OpenSubKey($sub)
Foreach($sub2 in $regKey2.GetValueNames())
{
if ($sub2 -eq \"ORACLE_SID\"«»)
{
# Pour chaque base de donnée :
$SID = $RegKey2.GetValue(\"ORACLE_SID\"«»)
# Il y a un oracle, on verifie le parametrage des bases
$regKey3 = $regKey.OpenSubKey($key2)
$AutoStart = $RegKey3.GetValue(\"ORA_\"+$SID+\"_AUTOSTART\"«»)
$Shutdown = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN\"«»)
$ShutdownType = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWNTYPE\"«»)
$ShutdownTimeOut = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN_TIMEOUT\"«»)
$Hash_BDD = @{SID=$SID;AutoStart=$AutoStart;Shutdown=$Shutdown;ShutdownType=$ShutdownType;ShutdownTimeOut=$ShutdownTimeOut}
$Liste_BDD += $Hash_BDD
}
}
}
}
# Si pas d'oracle
else {}
}
$Liste_BDD| Out-Gridview -Title 'Liste BDD oracle et param'
[/code:1]
Et évidemment ça ne marche pas, j'obtiens une colonne Name et une colonne Value.
Est-ce que je dois créer un Type pour obtenir l'affichage que je souhaite sous GridView ?<br><br>Message édité par: Escandil, à: 22/11/10 15:50
Je souhaite lister les options des BDD oracles sur différents serveurs.
Pour cela, j'interroge à distance les bases de registres des serveurs et je remonte les informations dont j'ai besoin.
Cette partie la fonctionne bien, mais je souhaite renvoyer mon résultat dans une fenêtre plutôt que dans un fichier de log.
J'ai donc décidé d'envoyer le tout dans un GridView en espérant obtenir 5 colonnes avec mes résultats.
Avec un tableau de tableau, j'obtiens une seule colonne, et pas de titre. Du coup en cherchant un peu, je tombe sur les hashtable et je me dis que c'est la solution à mes problèmes.
ça donne ça:
[code:1]
Clear
# Initialisation des variables
$Liste_BDD =@()
# Les clefs necessaires à la récupération du SID et des options de bases
$key = \"SOFTWARE\ORACLE\SYSMAN\\"
$key2 = \"SOFTWARE\ORACLE\KEY_OraDb10g_home1\"
# Connection à distance sur la base de registre
$type = [Microsoft.Win32.RegistryHive]::LocalMachine
Foreach( $Srv IN ('Liste de mes serveurs') )
{
$regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $Srv)
$regKey1 = $regKey.OpenSubKey($key)
# Si la clef de registre existe Oracle est installé
if ( $regKey1.Name )
{
Foreach($sub in $regKey1.GetSubKeyNames())
{
$regKey2=$regKey1.OpenSubKey($sub)
Foreach($sub2 in $regKey2.GetValueNames())
{
if ($sub2 -eq \"ORACLE_SID\"«»)
{
# Pour chaque base de donnée :
$SID = $RegKey2.GetValue(\"ORACLE_SID\"«»)
# Il y a un oracle, on verifie le parametrage des bases
$regKey3 = $regKey.OpenSubKey($key2)
$AutoStart = $RegKey3.GetValue(\"ORA_\"+$SID+\"_AUTOSTART\"«»)
$Shutdown = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN\"«»)
$ShutdownType = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWNTYPE\"«»)
$ShutdownTimeOut = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN_TIMEOUT\"«»)
$Hash_BDD = @{SID=$SID;AutoStart=$AutoStart;Shutdown=$Shutdown;ShutdownType=$ShutdownType;ShutdownTimeOut=$ShutdownTimeOut}
$Liste_BDD += $Hash_BDD
}
}
}
}
# Si pas d'oracle
else {}
}
$Liste_BDD| Out-Gridview -Title 'Liste BDD oracle et param'
[/code:1]
Et évidemment ça ne marche pas, j'obtiens une colonne Name et une colonne Value.
Est-ce que je dois créer un Type pour obtenir l'affichage que je souhaite sous GridView ?<br><br>Message édité par: Escandil, à: 22/11/10 15:50
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 4 mois #8096
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Tableau de Hashtable
Salut,
Escandil écrit:
A la place [code:1]$Hash_BDD = @{SID=$SID;AutoStart=$AutoStart;Shutdown=$Shutdown;ShutdownType=$ShutdownType;ShutdownTimeOut=$ShutdownTimeOut}[/code:1]
faire
[code:1] new-object PSObject -property @{
SID=$SID;
AutoStart=$AutoStart;
Shutdown=$Shutdown;
ShutdownType=$ShutdownType;
ShutdownTimeOut=$ShutdownTimeOut}
[/code:1]
Il te faut prêter attention au type ( contraint ou pas ? ).
Et au lieu de :
[code:1]
$Liste_BDD += $Hash_BDD
[/code:1]
Tu émets l'objet dans le pipeline, qui portera donc implicitement ta structure de données, un tableau d'objet ( [PSCustomobject[]]).
Je te laisse tester, mais d'après le premier exemple de la doc de out-gridview :
[code:1]get-process | out-gridview[/code:1]
On peut logiquement supposé que cette grille s'appuie sur les membres d'un objet adapté.
Escandil écrit:
Créé des objets personnalisés à l'aide de New-Object -property.Est-ce que je dois créer un Type pour obtenir l'affichage que je souhaite sous GridView ?
A la place [code:1]$Hash_BDD = @{SID=$SID;AutoStart=$AutoStart;Shutdown=$Shutdown;ShutdownType=$ShutdownType;ShutdownTimeOut=$ShutdownTimeOut}[/code:1]
faire
[code:1] new-object PSObject -property @{
SID=$SID;
AutoStart=$AutoStart;
Shutdown=$Shutdown;
ShutdownType=$ShutdownType;
ShutdownTimeOut=$ShutdownTimeOut}
[/code:1]
Il te faut prêter attention au type ( contraint ou pas ? ).
Et au lieu de :
[code:1]
$Liste_BDD += $Hash_BDD
[/code:1]
Tu émets l'objet dans le pipeline, qui portera donc implicitement ta structure de données, un tableau d'objet ( [PSCustomobject[]]).
Je te laisse tester, mais d'après le premier exemple de la doc de out-gridview :
[code:1]get-process | out-gridview[/code:1]
On peut logiquement supposé que cette grille s'appuie sur les membres d'un objet adapté.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- SUSINI Vincent
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
il y a 15 ans 4 mois #8099
par SUSINI Vincent
Réponse de SUSINI Vincent sur le sujet Re:Tableau de Hashtable
Bonjour,
Merci beaucoup pour la réponse, j'ai pu faire ce que je souhaitais avec le gridview.
J'ai modifié mon code comme suit :
[code:1]
[..]
# Il y a un oracle, on verifie le parametrage des bases
$regKey3 = $regKey.OpenSubKey($key2)
$AutoStart = $RegKey3.GetValue(\"ORA_\"+$SID+\"_AUTOSTART\"«»)
$Shutdown = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN\"«»)
$ShutdownType = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWNTYPE\"«»)
$ShutdownTimeOut = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN_TIMEOUT\"«»)
$Liste_BDD += new-object PSObject -property @{
SID=$SID;
AutoStart=$AutoStart
Shutdown=$Shutdown;
ShutdownTimeOut=$ShutdownTimeOut;
ShutdownType=$ShutdownType}
}
[..][/code:1]
Par contre, je n'ai pas bien compris cette phrase :
Si je met un pipe au sein de ma boucle je vais avoir X fenêtres gridview contenant chacune un objet, du coup il faut bien que je stock ma structure dans un tableau non ?
Sauf erreur l'objet est recréer à chaque itération du coup il faut bien le stocker avant qu'il soit détruit non ?
Enfin c'est des questions subsidiaires, le problème de départ est résolu, et pour le plaisir (et d'éventuels DBA qui se promènent) je vous donne un aperçu du résultat.
Les méthodes de recherche/tri de la gridview sont vraiment très pratiques.
edit: Ajout de l'image avec la taille adéquat. <br><br>Message édité par: Escandil, à: 19/11/10 14:50
Merci beaucoup pour la réponse, j'ai pu faire ce que je souhaitais avec le gridview.
J'ai modifié mon code comme suit :
[code:1]
[..]
# Il y a un oracle, on verifie le parametrage des bases
$regKey3 = $regKey.OpenSubKey($key2)
$AutoStart = $RegKey3.GetValue(\"ORA_\"+$SID+\"_AUTOSTART\"«»)
$Shutdown = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN\"«»)
$ShutdownType = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWNTYPE\"«»)
$ShutdownTimeOut = $RegKey3.GetValue(\"ORA_\"+$SID+\"_SHUTDOWN_TIMEOUT\"«»)
$Liste_BDD += new-object PSObject -property @{
SID=$SID;
AutoStart=$AutoStart
Shutdown=$Shutdown;
ShutdownTimeOut=$ShutdownTimeOut;
ShutdownType=$ShutdownType}
}
[..][/code:1]
Par contre, je n'ai pas bien compris cette phrase :
Tu émets l'objet dans le pipeline, qui portera donc implicitement ta structure de données, un tableau d'objet ( [PSCustomobject[]]).
Si je met un pipe au sein de ma boucle je vais avoir X fenêtres gridview contenant chacune un objet, du coup il faut bien que je stock ma structure dans un tableau non ?
Sauf erreur l'objet est recréer à chaque itération du coup il faut bien le stocker avant qu'il soit détruit non ?
Enfin c'est des questions subsidiaires, le problème de départ est résolu, et pour le plaisir (et d'éventuels DBA qui se promènent) je vous donne un aperçu du résultat.
Les méthodes de recherche/tri de la gridview sont vraiment très pratiques.
edit: Ajout de l'image avec la taille adéquat. <br><br>Message édité par: Escandil, à: 19/11/10 14:50
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 4 mois #8100
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Tableau de Hashtable
Escandil écrit:
Je pensais à une fonction qui renvoyait le résultat dans le pipeline. Qq chose comme :
[code:1]Get-OracleInstanceOptions -Server \"name\"|Out-GridView
Get-OracleInstanceOptions -Server \"name\"|Export-CSV c:\temp\result.txt[/code:1]...
Ainsi codé, les donnés produites par ton script peuvent être réutilisées. Dans ton approche tout est couplé.
C'est bien que les DBA Oracle se mettent à utiliser ce produit
J'avais envisager à un moment de développer un Provider pour Oracle comme SMO pour Sql Server, mais cela demande trop de travail. De plus le parc Oracle me semble plus important sous Unix.<br><br>Message édité par: Laurent Dardenne, à: 19/11/10 15:11
J'ai pris l'habitude de coder en pensant pipeline.Par contre, je n'ai pas bien compris cette phrase :
Si je met un pipe au sein de ma boucle je vais avoir X fenêtres gridview contenant chacune un objet, du coup il faut bien que je stock ma structure dans un tableau non ?Tu émets l'objet dans le pipeline, qui portera donc implicitement ta structure de données, un tableau d'objet ( [PSCustomobject[]]).
Sauf erreur l'objet est recréer à chaque itération du coup il faut bien le stocker avant qu'il soit détruit non ?
Je pensais à une fonction qui renvoyait le résultat dans le pipeline. Qq chose comme :
[code:1]Get-OracleInstanceOptions -Server \"name\"|Out-GridView
Get-OracleInstanceOptions -Server \"name\"|Export-CSV c:\temp\result.txt[/code:1]...
Ainsi codé, les donnés produites par ton script peuvent être réutilisées. Dans ton approche tout est couplé.
C'est bien que les DBA Oracle se mettent à utiliser ce produit
J'avais envisager à un moment de développer un Provider pour Oracle comme SMO pour Sql Server, mais cela demande trop de travail. De plus le parc Oracle me semble plus important sous Unix.<br><br>Message édité par: Laurent Dardenne, à: 19/11/10 15:11
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- SUSINI Vincent
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
il y a 15 ans 3 mois #8106
par SUSINI Vincent
Réponse de SUSINI Vincent sur le sujet Re:Tableau de Hashtable
Merci encore pour l'assistance, je vais essayer de faire une belle fonction histoire d'améliorer mon code.
Et (malheureusement ?) je suis plus admin unix que DBA, mais j'ai les deux casquettes, et nos BDD migrant d'AIX vers Windows, j'en profite pour acquérir quelques notions de powershell ^^
Reste plus qu'a trouver comment on tag le fil en 'résolu'
Et (malheureusement ?) je suis plus admin unix que DBA, mais j'ai les deux casquettes, et nos BDD migrant d'AIX vers Windows, j'en profite pour acquérir quelques notions de powershell ^^
Reste plus qu'a trouver comment on tag le fil en 'résolu'
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.099 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Tableau de Hashtable