Question [] récupérer l'erreur du catch

Plus d'informations
il y a 5 ans 2 mois #28203 par Ludovic B
Bonjour,
je voudrais récupérer l'erreur du catch , pour effectuer un traitement après . je post le script.

[code:1]
#region credential
$username = \"xxxx\xxxx\"
$mdp = ConvertTo-SecureString -String \"xxxx\" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $mdp
#endregion credential
$serveurRDS = \"RDS-2008\"
try
{
Write-Host -ForegroundColor green $serveurRDS
$Session = New-PSSession -ComputerName $serveurRDS -Credential $cred
$Results = Invoke-Command -Session $Session -ScriptBlock {



$ArrayUsersNotDelete = '.NET v4.5|admin|.NET v4.5 Classic|MSSQL$MICROSOFT##WID|Public|Default|Administrateur|CS-OM-AS|SVC-SQL' #
$PathFolderUsers = \"C:\Users\\"
$FolderUsers = Get-ChildItem -Path $PathFolderUsers | where { $_.FullName -notmatch $ArrayUsersNotDelete }
# $FolderUsers
# $FolderUsers | gm
$Dateday = Get-Date -Format d
$Dateday = [datetime]::«»Parse($Dateday, $null)
# $Dateday.GetType()
# Write-Host $Dateday -ForegroundColor Green

$Array_dossier_users = @() # creation du tableau vide

foreach ($Users IN $FolderUsers)
{
$NameFolderUsers = $Users.Name # recuperer que le nom du dossier
$NameFolderUsersDate = $Users.LastWriteTime # recuperer la date de création du dossier
$NameFolderDeleteUser = $NameFolderUsers
# Write-Host $NameFolderUsersDate -ForegroundColor Green
# Write-Host $NameFolderUsers -ForegroundColor Green
# $NameFolderUsersDate
$NameFolderUsersDate = (get-date $NameFolderUsersDate -format 'dd/MM/yyyy')
$NameFolderUsersDateFR = (get-date $NameFolderUsersDate -format 'dd/MM/yyyy')
$NameFolderUsersDate = [datetime]::«»Parse($NameFolderUsersDate, $null)
# $NameFolderUsersDate.GetType()

# Write-Host $NameFolderUsersDate -ForegroundColor Green
if (($NameFolderUsers.EndsWith('.torx')) -or ($NameFolderUsers.EndsWith('.torx.corp')) -or ($NameFolderUsersDate -lt $Dateday))
{

$Traitement = \"A-Faire\"
$Nomuser = $NameFolderUsers
#Write-Host $Nomuser -ForegroundColor Green
$Array_dossier_users += New-Object System.Management.Automation.PSObject -Property @{ 'Dossier_user' = $Nomuser; 'Date_du_dossier' = $NameFolderUsersDateFR; 'Date_du_jour' = $Dateday; 'Traitement' = $Traitement } # ajout dans le tableau a chaque tour
} #end if
else
{
$Traitement = \"Pas de Traitement\"
}
} #end foreach
Write-Host \" liste des dossier : $Array_dossier_users\"
$Array_dossier_users

}#end PSSession
remove-pssession $Session


} #end Try
catch [System.Management.Automation.ValidationMetadataException]
{
Write-Host -ForegroundColor Yellow $Error[0].Exception.GetType()
Write-Host -ForegroundColor Cyan $Error[0].Exception
$TraitementErreur = \"Echec-Session\"
}
catch
{
Write-Host -ForegroundColor Yellow $Error[0].Exception.GetType()
Write-Host -ForegroundColor Cyan $Error[0].Exception
$TraitementErreur = \"Erreur\"
}


Write-Host -ForegroundColor Yellow $Traitement

if ($Results | select Traitement | where { $_.Traitement -eq \"A-Faire\"} )
{
$Traitement = \"A-Faire\"
#Write-Host -ForegroundColor Yellow $Traitement





#region Out result in File
#$Array_dossier_users_txt | Out-File \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user.txt\" -Force
$Results | select Dossier_user | Out-File \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user_$serveurRDS.txt\" -Force
#endregion Out result in File

#region formatage fichier txt -Skip 3 , enlever les 3 permiere logne

Get-Content -Path \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user_$serveurRDS.txt\" | select -Skip 3 | Out-File \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user-Final_$serveurRDS.txt\"

# enlever les CR/LF
[IO.File]::ReadAllText(\"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user-Final_$serveurRDS.txt\"«») -replace '\s+\r\n+', \"`r`n\" | Out-File \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user-Final_$serveurRDS.txt\" -Force
$fileuser = [IO.File]::ReadAllText(\"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user-Final_$serveurRDS.txt\"«»)
[IO.File]::WriteAllLines(\"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user-Final_$serveurRDS.txt\", $fileuser.TrimEnd()) # pour supprimer l'ajout de ligne en plus du out-file
$file_folder_user = \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user-Final_$serveurRDS.txt\"
#endregion formatage fichier txt


#region Traietment HTML

[string]$CSS = @'
<style>
h2 {
color:black;
text-align:center;
text-decoration:underline;
font-size:18pt;
}

body {font-family:Verdana;
font-size:8pt;
background: #fefeff}
h2 {color:rgb(109, 108, 108);
text-align:center;
text-decoration:underline;
font-size:18pt;}
th { color:yellow;
background-Color:black; }
tr {color:rgb(252, 250, 250)}
TR:Nth-Child(even) {Background-Color: #73737a;}
TR:Nth-Child(odd) {Background-Color: #969393;}
tr:hover {background-color: deeppink;}
table, tr, td, th {padding: 20px; margin: 0px;text-align: center;vertical-align:top}
table {margin-left: auto;margin-right: auto;}
</style>
'@

$Results | select Dossier_user, Date_du_dossier, Date_du_jour | ConvertTo-HTML -Head $CSS -PreContent \"<h2>La liste des dossiers à supprimer sur le serveur RDS $serveurRDS</h2>\" | out-file \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user_$serveurRDS.html\"

$Body = \"\\srv-sco-01\c$\Commandes\Maintenances\RDS\Report-dossier-delete-user_$serveurRDS.html\"
#endregion Traietment HTML


}
ifelse ($Results | select Traitement | where { $_.Traitement -notlike \"A-Faire\"} )
{
$Traitement = \"Pas de Traitement\"
}
else
{
$Traitement = $TraitementErreur
}

[/code:1]

merci de votre aide.<br><br>Message édité par: ludoob, à: 15/02/19 10:08

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

Plus d'informations
il y a 5 ans 2 mois #28211 par Arnaud Petitjean
Bonjour Ludoob,

Pour récupérer l'erreur du catch, il te suffit dans ton bloc Catch d'ajouter :
[code:1]
Throw $_
[/code:1]

L'objet erreur se trouve stockée dans la variable $_ à l'intérieur de ton bloc Catch.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

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