Question
Modification tableau existant
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 11 mois #21691
par Philippe

Larent a fait un tuto ici pour les objet
pour les fonctions je t'ai trouvé ce tuto qui semble cours mais clair
pour que tu puise passé un weekend tranquille sur ton livre, je t'ai fait quelque modif a ton script pour qu'il fonctionne :
[code:1]# -- VARIABLES -- #
$ErrorActionPreference = 'stop'
$scriptdir = Split-Path -Path $MyInvocation.MyCommand.Path
$ficherr = \"$scriptdir\imprim_error.ini\"
$detailerr = Import-Csv $ficherr -Delimiter \",\" -Header \"numerr\", \"descerr\"
# -- FONCTIONS -- #
#verification nom machine si ne correspond pas, utilisation de localhost
function testnom
{
if ($script:«»pc -notmatch \"118701\" -and $script:«»pc -notmatch \"55.160\"«»)
{
$script:«»pc = \"localhost\"
write-host \"Recherche sur\" $script:«»pc
}
}
#Test connection machine
function testcon
{
param
(
[String] $ordinateur
)
Try
{
Get-WmiObject win32_printer -ComputerName $ordinateur
}
Catch
{
Write-Warning \"Machine impossible à contacter !!\"
Start-Sleep -Seconds 10
exit
}
}
#identifications des code erreurs en fonction de imprim_error.ini
function identerr
{
param
(
$tableau,
$listerreur
)
foreach($ligne in $tableau)
{
$listerreur | foreach {
if ($_.numerr -eq $ligne.detectederrorstate)
{
Write-Host $_.descerr
$ligne.msgerr = $_.descerr
}
}
}
$tableau
}
# -- SCRIPT -- #
clear
$pc = Read-Host \"Nom de la machine\"
testnom
$infoimprim = testcon $pc
$infoimprim | Add-Member -Name \"msgerr\" -MemberType NoteProperty -Value \"\"
$tablimprim = identerr $infoimprim $detailerr
$tablimprim = $tablimprim | select @{Name='Nom';Expression = {$_.caption}},@{Name='Port/IP';Expression = {$_.Portname}},@{Name='Par défaut';Expression = {$_.default}},@{Name='Code Erreur';Expression = {$_.DetectedErrorState}},@{Name='Erreur';Expression = {$_.msgerr}}
$tablimprim | ft -AutoSize 'Nom','Port/IP','Par défaut','Code Erreur','Erreur'
[/code:1]
je l'ai un peu plus orienté objet mais il y a encore du travail
je t'ai laissé testnom ou tu peu faire la même chose que testcon<br><br>Message édité par: 6ratgus, à: 15/04/16 15:03
Réponse de Philippe sur le sujet Re:Modification tableau existant
il te faudra revoir les chapitres sur l'utilisation des objets et le passage de paramètre a une fonctionJe continue mes investigations, j'ai un bouquin Windows PowerShell v4 similaire a ceux présenté dans le site, il va falloir que je pense à le ressortir plus souvent
Larent a fait un tuto ici pour les objet
pour les fonctions je t'ai trouvé ce tuto qui semble cours mais clair
pour que tu puise passé un weekend tranquille sur ton livre, je t'ai fait quelque modif a ton script pour qu'il fonctionne :
[code:1]# -- VARIABLES -- #
$ErrorActionPreference = 'stop'
$scriptdir = Split-Path -Path $MyInvocation.MyCommand.Path
$ficherr = \"$scriptdir\imprim_error.ini\"
$detailerr = Import-Csv $ficherr -Delimiter \",\" -Header \"numerr\", \"descerr\"
# -- FONCTIONS -- #
#verification nom machine si ne correspond pas, utilisation de localhost
function testnom
{
if ($script:«»pc -notmatch \"118701\" -and $script:«»pc -notmatch \"55.160\"«»)
{
$script:«»pc = \"localhost\"
write-host \"Recherche sur\" $script:«»pc
}
}
#Test connection machine
function testcon
{
param
(
[String] $ordinateur
)
Try
{
Get-WmiObject win32_printer -ComputerName $ordinateur
}
Catch
{
Write-Warning \"Machine impossible à contacter !!\"
Start-Sleep -Seconds 10
exit
}
}
#identifications des code erreurs en fonction de imprim_error.ini
function identerr
{
param
(
$tableau,
$listerreur
)
foreach($ligne in $tableau)
{
$listerreur | foreach {
if ($_.numerr -eq $ligne.detectederrorstate)
{
Write-Host $_.descerr
$ligne.msgerr = $_.descerr
}
}
}
$tableau
}
# -- SCRIPT -- #
clear
$pc = Read-Host \"Nom de la machine\"
testnom
$infoimprim = testcon $pc
$infoimprim | Add-Member -Name \"msgerr\" -MemberType NoteProperty -Value \"\"
$tablimprim = identerr $infoimprim $detailerr
$tablimprim = $tablimprim | select @{Name='Nom';Expression = {$_.caption}},@{Name='Port/IP';Expression = {$_.Portname}},@{Name='Par défaut';Expression = {$_.default}},@{Name='Code Erreur';Expression = {$_.DetectedErrorState}},@{Name='Erreur';Expression = {$_.msgerr}}
$tablimprim | ft -AutoSize 'Nom','Port/IP','Par défaut','Code Erreur','Erreur'
[/code:1]
je l'ai un peu plus orienté objet mais il y a encore du travail
je t'ai laissé testnom ou tu peu faire la même chose que testcon<br><br>Message édité par: 6ratgus, à: 15/04/16 15:03
Connexion ou Créer un compte pour participer à la conversation.
- Koubiacz
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 9 ans 11 mois #21692
par Koubiacz
Réponse de Koubiacz sur le sujet Re:Modification tableau existant
Bon du coup à l'aide vos commentaires, j'ai décidé de \"tout peter\" et de repartir sur autre chose qui fonctionne
[code:1]# -- VARIABLES -- #
$ErrorActionPreference = 'stop'
$scriptdir = Split-Path -Path $MyInvocation.MyCommand.Path
$ficherr = \"$scriptdir\imprim_error.ini\"
$detailerr = Get-content $ficherr
$script:infoimprim = @()
$table = @()
# -- FONCTIONS -- #
#verification nom machine si ne correspond pas, utilisation de localhost
function testnom
{
if ($script:«»pc -notmatch \"118701\" -and $pc -notmatch \"55.160\"«»)
{
$script:«»pc = \"localhost\"
write-host \"Recherche sur\" $script:«»pc
}
}
#Test connection machine
function testcon
{
Try
{
$script:infoimprim = Get-WmiObject win32_printer -ComputerName $script:«»pc
}
Catch
{
Write-Warning \"Machine impossible à contacter !!\"
Start-Sleep -Seconds 10
exit
}
}
#-- SCRIPT --#
clear
$script:«»pc = Read-Host \"Nom de la machine\"
testnom
testcon
$nl = 0
foreach($ligne in $script:infoimprim)
{
$ligne = New-Object Psobject
$ligne | Add-Member -Name \"Nom\" -MemberType NoteProperty -Value $script:infoimprim[$nl].caption
$ligne | Add-Member -Name \"Port / IP\" -MemberType NoteProperty -Value $script:infoimprim[$nl].Portname
$ligne | Add-Member -Name \"Par défaut\" -MemberType NoteProperty -Value $script:infoimprim[$nl].default
$ligne | Add-Member -Name \"Code erreur\" -MemberType NoteProperty -Value $script:infoimprim[$nl].DetectedErrorState
foreach($lignfich in $detailerr)
{
$col = $lignfich.split(\",\"«»)
$numerr = $col[0]
$deserr = $col[1]
if ($numerr -eq $script:infoimprim[$nl].DetectedErrorState)
{
$ligne | Add-Member -Name \"Erreur\" -MemberType NoteProperty -Value $deserr
}
}
$table += $ligne
$nl = $nl +1
}
$table | ft -AutoSize 'Nom','Port / IP','Par défaut','Code erreur','Erreur'[/code:1]
Reste deux trois bricoles à faire, mais rien de bien méchant.
Plutôt que d'essayer d'ajouter une colonne à un tableau crée par le système, j'ai décidé de récupérer les valeurs que je veux et d'un refaire un.
[code:1]# -- VARIABLES -- #
$ErrorActionPreference = 'stop'
$scriptdir = Split-Path -Path $MyInvocation.MyCommand.Path
$ficherr = \"$scriptdir\imprim_error.ini\"
$detailerr = Get-content $ficherr
$script:infoimprim = @()
$table = @()
# -- FONCTIONS -- #
#verification nom machine si ne correspond pas, utilisation de localhost
function testnom
{
if ($script:«»pc -notmatch \"118701\" -and $pc -notmatch \"55.160\"«»)
{
$script:«»pc = \"localhost\"
write-host \"Recherche sur\" $script:«»pc
}
}
#Test connection machine
function testcon
{
Try
{
$script:infoimprim = Get-WmiObject win32_printer -ComputerName $script:«»pc
}
Catch
{
Write-Warning \"Machine impossible à contacter !!\"
Start-Sleep -Seconds 10
exit
}
}
#-- SCRIPT --#
clear
$script:«»pc = Read-Host \"Nom de la machine\"
testnom
testcon
$nl = 0
foreach($ligne in $script:infoimprim)
{
$ligne = New-Object Psobject
$ligne | Add-Member -Name \"Nom\" -MemberType NoteProperty -Value $script:infoimprim[$nl].caption
$ligne | Add-Member -Name \"Port / IP\" -MemberType NoteProperty -Value $script:infoimprim[$nl].Portname
$ligne | Add-Member -Name \"Par défaut\" -MemberType NoteProperty -Value $script:infoimprim[$nl].default
$ligne | Add-Member -Name \"Code erreur\" -MemberType NoteProperty -Value $script:infoimprim[$nl].DetectedErrorState
foreach($lignfich in $detailerr)
{
$col = $lignfich.split(\",\"«»)
$numerr = $col[0]
$deserr = $col[1]
if ($numerr -eq $script:infoimprim[$nl].DetectedErrorState)
{
$ligne | Add-Member -Name \"Erreur\" -MemberType NoteProperty -Value $deserr
}
}
$table += $ligne
$nl = $nl +1
}
$table | ft -AutoSize 'Nom','Port / IP','Par défaut','Code erreur','Erreur'[/code:1]
Reste deux trois bricoles à faire, mais rien de bien méchant.
Plutôt que d'essayer d'ajouter une colonne à un tableau crée par le système, j'ai décidé de récupérer les valeurs que je veux et d'un refaire un.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 11 mois #21694
par Philippe
Réponse de Philippe sur le sujet Re:Modification tableau existant
c'est autre approche 
tu peut quand même changé la recherche du message d'erreur comme dans le script que je t'ai donné j'aurai pas l'impression d'avoir travaillé pour rien
tu peut quand même changé la recherche du message d'erreur comme dans le script que je t'ai donné j'aurai pas l'impression d'avoir travaillé pour rien
Connexion ou Créer un compte pour participer à la conversation.
- Koubiacz
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 9 ans 11 mois #21695
par Koubiacz
Réponse de Koubiacz sur le sujet Re:Modification tableau existant
J'avais pas vu que tu avais modifié le script que j'avais posté 
Je vais quand même le garder, ça me fait un bon exemple.
Merci
Je vais quand même le garder, ça me fait un bon exemple.
Merci
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.047 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Modification tableau existant