Question [Résolu] Powershell et BDD

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 7 ans 8 mois #27563 par PatriceLT
[Résolu] Powershell et BDD a été créé par PatriceLT
Bonjour,

Je suis actuellement sur un script qui fait plusieurs choses :

1 - Connexion à une BDD en WID (Windows Internal Database)

2 - Exécution d'un .sql

3 - Récupération des données via Export-Csv

Les 2 choses que je souhaiterai, sont :

1 - La compression de certains fichiers d'export :
Exemple : toto.csv / tata.csv / titi.csv

Je souhaite compresser uniquement toto.csv (le nom de toto.csv est connu et fixe)

2 - Lors de mon extraction de donnée, via l'export-csv de powershell, je souhaite que le nom des colonnes (bdd) soit supprimé, peut-on faire cela, via une option du Export-csv ou dois-je retravailler mon csv ?

Actuellement, mon fichier d'export de base, est un fichier temporaire, ou je fais un get-content dessus, puis un Select -Skip 1 pour ensuite faire un Set-Content vers le fichier final .csv

Voici mon script :

[code:1]

$CheminSortie = \"D:\Patrice\BDD\Export\"
$CheminSQL = \"D:\Patrice\BDD\SQL\"
$NomBDD = \"Patrice\"

$SQLConnexion = New-Object System.Data.SqlClient.SqlConnection

# WID
$SQLConnexion.ConnectionString = \"server=\\.\pipe\MICROSOFT##WID\tsql\query;database=Patrice;Integrated Security=true;\"

$SQLConnexion.Open()
if($SQLConnexion.State -eq \"Open\"«»)
{
$sqlCMD = New-Object System.Data.SqlClient.SqlCommand
$sqlCMD.CommandText = $sqlStr
$sqlCMD.Connection = $SQLConnexion
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $sqlCMD
$SqlAdapter.SelectCommand.CommandTimeout = 600
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
if(!($DataSet.Table[0] -eq $null))
{
$DataSet.Tables[0] | Export-Csv \"$CheminSortie\toto.csv\" -Delimiter \";\" -NoTypeInformation
Get-Content \"$CheminSortie\toto.csv\" | Select -Skip 1 | Set-Content \"$CheminSortie\Extract.csv\" -Encoding Unicode
Remove-Item -Path \"$CheminSortie\toto.csv\"
}
else
{
Write-Host \"[ERREUR] Table vide\"
}
$SQLConnexion.Close()
Start-Sleep 2
}
else
{
Write-Host \"[ERREUR] Impossible d'ouvrir une connexion vers la base\"
}

[/code:1]

Pour le point de la compression de fichier, je ne sais pas comment faire pour que :

Dès que l'export s'est terminé (entre autre, tant que l'export-csv est toujours en cours, l'export se fait, mais dès qu'il a terminé (ce qui peut prendre pour certains exports, pas mal de temps), à ce moment, compresser les fichiers choisis par leur nom.

Y-a-t-il un module sous powershell 5 ou 6 qui permettrait, nativement, sans rien télécharger, une fonction, ou méthode de compression ? qui fait un fichier zip, compress dès que le fichier .csv est terminé ?

Merci par avance !

Bonne journée

Message édité par: PatriceLT, à: 19/09/18 11:56<br><br>Message édité par: Arnaud, à: 20/09/18 15:04

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

Plus d'informations
il y a 7 ans 8 mois #27568 par Philippe
Réponse de Philippe sur le sujet Re:Powershell et BDD
salut

pour la question 1 tu a Compress-Archive

un exemple d'utilisation tirer de la doc :
[code:1]Compress-Archive -LiteralPath C:\Reference\Draftdoc.docx, C:\Reference\Images\diagram2.vsd –CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip[/code:1]

pour le moment de la compress puisque ton script contient en statique les nom de fichiers il suffit de faire la compression apres cette ligne
[code:1]Get-Content \&quot;$CheminSortie\toto.csv\&quot; | Select -Skip 1 | Set-Content \&quot;$CheminSortie\Extract.csv\&quot; -Encoding Unicode
[/code:1]la compression ce ferra des que le set-content sera fini


pour la question 2, le format des CSV est standard et donc il n'est pas prevue de sortir la ligne d'entête
ta méthode est la méthode classic de ce cas

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 7 ans 8 mois #27575 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Powershell et BDD
Merci 6ratgus !!!!

Tu seras toujours mon sauveur, depuis le temps :lol:

Le résultat attendu au niveau de la compression, est ok !

Cependant j'ai encore un doute sur le Select -Skip 1, cela peut-il être dangereux ?

Suppression de ligne donc de données, entête manquante ?

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

Plus d'informations
il y a 7 ans 8 mois #27577 par Philippe
Réponse de Philippe sur le sujet Re:Powershell et BDD

Cependant j'ai encore un doute sur le Select -Skip 1, cela peut-il être dangereux ?

Suppression de ligne donc de données, entête manquante ?

il n'y a pas de risque puisque l'export-csv met toujours l'entête(les noms de colonnes) au debut du fichier

par contre tu ne peut plus faire d\&quot;export-csv -append vers ce fichier
mais ce semble pas être un problème sur ton script

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 7 ans 8 mois #27582 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Powershell et BDD
Effectivement, mais on m'avait conseillé de ne pas faire de skip 1 car cela peut entraîner soit, la suppression de données car l'entête serait manquante, soit de ne rien avoir, mais après plusieurs tests. Cela fonctionne bien.

En ce qui concerne le -append de mon fichier de sortie, tu as raison, aucun besoin, car le script va être scheduling, et donc, 1 fois par jours, le fichier va être généré, puis supprimé après la compression, donc aucun risque que le fichier soit mis à jour car déjà présent.

Du coup, j'ai rajouté un petit test dans mon code à la fin, pour le compress

[code:1]
if(!(Test-Path $CheminZip))
{
Compress-Archive -Path \&quot;$CheminCsv\Toto.csv\&quot; –CompressionLevel Optimal -DestinationPath \&quot;$CheminZip\Test.zip\&quot;
}
else
{
Compress-Archive -Path \&quot;$CheminCsv\Toto.csv\&quot; –CompressionLevel Optimal -DestinationPath \&quot;$CheminZip\Test.zip\&quot; -Update
}
[/code:1]

Du coup, ce qui me permet de vérifier si l'archive à déjà été créé, et au pire, si elle l'a été, de faire un update du fichier ce qui n'est pas plus mal.

En tout cas, merci pour ta confirmation sur mon doute, et cela fonctionne très bien :), ça m'enlève une belle épine du pied :laugh:<br><br>Message édité par: PatriceLT, à: 20/09/18 11:49

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

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