Question Modification tableau existant

Plus d'informations
il y a 9 ans 11 mois #21691 par Philippe
Réponse de Philippe sur le sujet Re:Modification tableau existant

Je 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

il te faudra revoir les chapitres sur l'utilisation des objets et le passage de paramètre a une fonction ;)
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.

Plus d'informations
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 \&quot;tout peter\&quot; et de repartir sur autre chose qui fonctionne

[code:1]# -- VARIABLES -- #
$ErrorActionPreference = 'stop'
$scriptdir = Split-Path -Path $MyInvocation.MyCommand.Path
$ficherr = \&quot;$scriptdir\imprim_error.ini\&quot;
$detailerr = Get-content $ficherr
$script:infoimprim = @()
$table = @()


# -- FONCTIONS -- #
#verification nom machine si ne correspond pas, utilisation de localhost
function testnom
{
if ($script:«»pc -notmatch \&quot;118701\&quot; -and $pc -notmatch \&quot;55.160\&quot;«»)
{
$script:«»pc = \&quot;localhost\&quot;
write-host \&quot;Recherche sur\&quot; $script:«»pc
}
}

#Test connection machine
function testcon
{
Try
{
$script:infoimprim = Get-WmiObject win32_printer -ComputerName $script:«»pc
}
Catch
{
Write-Warning \&quot;Machine impossible à contacter !!\&quot;
Start-Sleep -Seconds 10
exit
}
}

#-- SCRIPT --#
clear
$script:«»pc = Read-Host \&quot;Nom de la machine\&quot;
testnom
testcon

$nl = 0
foreach($ligne in $script:infoimprim)
{
$ligne = New-Object Psobject
$ligne | Add-Member -Name \&quot;Nom\&quot; -MemberType NoteProperty -Value $script:infoimprim[$nl].caption
$ligne | Add-Member -Name \&quot;Port / IP\&quot; -MemberType NoteProperty -Value $script:infoimprim[$nl].Portname
$ligne | Add-Member -Name \&quot;Par défaut\&quot; -MemberType NoteProperty -Value $script:infoimprim[$nl].default
$ligne | Add-Member -Name \&quot;Code erreur\&quot; -MemberType NoteProperty -Value $script:infoimprim[$nl].DetectedErrorState
foreach($lignfich in $detailerr)
{
$col = $lignfich.split(\&quot;,\&quot;«»)
$numerr = $col[0]
$deserr = $col[1]
if ($numerr -eq $script:infoimprim[$nl].DetectedErrorState)
{
$ligne | Add-Member -Name \&quot;Erreur\&quot; -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.

Plus d'informations
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 B)
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 :evil: ;)

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

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

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

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