Question [Résolu] Tableau de Hashtable

Plus d'informations
il y a 15 ans 4 mois #8077 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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 4 mois #8096 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Tableau de Hashtable
Salut,
Escandil écrit:

Est-ce que je dois créer un Type pour obtenir l'affichage que je souhaite sous GridView ?

Créé des objets personnalisés à l'aide de New-Object -property.
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.

Plus d'informations
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(\&quot;ORA_\&quot;+$SID+\&quot;_AUTOSTART\&quot;«»)
$Shutdown = $RegKey3.GetValue(\&quot;ORA_\&quot;+$SID+\&quot;_SHUTDOWN\&quot;«»)
$ShutdownType = $RegKey3.GetValue(\&quot;ORA_\&quot;+$SID+\&quot;_SHUTDOWNTYPE\&quot;«»)
$ShutdownTimeOut = $RegKey3.GetValue(\&quot;ORA_\&quot;+$SID+\&quot;_SHUTDOWN_TIMEOUT\&quot;«»)

$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.

Plus d'informations
il y a 15 ans 4 mois #8100 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Tableau de Hashtable
Escandil écrit:

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 ?

J'ai pris l'habitude de coder en pensant pipeline.
Je pensais à une fonction qui renvoyait le résultat dans le pipeline. Qq chose comme :
[code:1]Get-OracleInstanceOptions -Server \&quot;name\&quot;|Out-GridView
Get-OracleInstanceOptions -Server \&quot;name\&quot;|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.

Plus d'informations
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'

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.099 secondes
Propulsé par Kunena