Résolu [RESOLU]script dans tache planifiée qui marche pas automatiquement

Plus d'informations
il y a 2 ans 10 mois - il y a 2 ans 10 mois #30905 par rhiwotar
Bonjour !

Je rencontre un probleme assez perturbant et je ne sais pas trop comment aborder le probleme.
J'ai un script qui s'execute sur 2 serveurs differents via une tache planifié, les scripts (sauf variable correspondant au nom du site et nom de fichier final) et les taches planifiées sont identiques.
Sur le serveur 1, pas de probleme, sur le serveur 2, c'est un peu plus exotique...
Sur mon 2e serveur, la tache planifié s'execute sans encombre d'apres l'historique mais l'export-csv à la fin ne s'execute pas.
Si je clique sur la tache planifiée et lui dis de s'executer, celle-ci se lance et à la fin, mon csv arrive.
Si je modifie mon script pour ajouter les logs à grand coup de add-content dans un autre fichier, le tout, tombant dans le meme repertoire, le fichier log arrive aussi que la tache planifié se lance à son declenchement ou forcé à la main.

Ma question, pourquoi mon export-csv ne marche pas seulement dans le cas du declenchement automatique de la tache planifiée sur ce serveur?

Etant à court d'idées, je prend tout ce que vous avez à proposer

Merci d'avance
Dernière édition: il y a 2 ans 10 mois par rhiwotar.

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

Plus d'informations
il y a 2 ans 10 mois #30910 par Arnaud Petitjean
Hello Rhiwotar,

Essaie de dumper la variable $error dans ton script vers un fichier de log. Ainsi on saura pourquoi l'exécution du script ne va pas jusqu'au bout.

 

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.

Plus d'informations
il y a 2 ans 10 mois #30922 par rhiwotar
Salut Arnaud,

La tache planifiée vient de finir.
J'ai mis un add-content $error juste apres l'export-csv et il ne m'a rien retourné.

Je viens d'anonymiser vite fait le script, se sera peut-etre plus parlant
$serveurDHCP = "serveur"
$fichierlog = "fichier"
$listeMaj = New-Object System.Collections.ArrayList
$i=0
$nomFichier ="WSUS - Test - LogMaj - srvwsus-scey - "+(get-date).ToString("yyyy-MM-dd")+".csv"


Add-Content -Path $fichierlog -value "###### Log Update ######"
Add-Content -Path $fichierlog -value (get-date).ToString('yyyy-MM-dd_HH:mm')

#extrait les postes du DHCP
$ListeDHCP = Get-DhcpServerv4Scope -ComputerName $serveurDHCP|Get-DhcpServerv4Lease -ComputerName $serveurDHCP|group hostname|sort name

Add-Content -Path $fichierlog -value $listedhcp.name


$ListeDHCP.name|foreach {
    #verifie que les postes soient dans l'AD
    $pc = Get-ADComputer  -filter 'dnshostname -like $_' -Properties operatingsystem |where {$_.operatingsystem -like "*10*"}
    $i +=1
    Add-Content -Path $fichierlog -value $pc.name
    #Write-Host $i
    if($pc -notlike $null){
        if(Test-Connection $pc.name -Count 1 -erroraction SilentlyContinue){
            #si le pc ping, force les maj et recupere la liste des maj en attente
            $result = Invoke-Command -ComputerName $pc.name -ScriptBlock {
                if(-not(get-module PSWindowsUpdate)){
                    #installe le neccessaire si manquant
                    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
                    Install-PackageProvider -name nuget -force
                    Set-PSRepository -Name psgallery -InstallationPolicy Trusted
                    start-sleep 10
                    Install-Module pswindowsupdate -force
                }
                #installe les maj
                Install-WindowsUpdate -AcceptAll -ForceDownload -ForceInstall 
                }
            if ($i -eq ($ListeDHCP|measure).Count){
                break
            }
        }
        foreach($maj in $result){
            if($maj.title -notlike $null){
                #Pour maj maj, prepare un listing
                $temp = New-Object System.Object
                Add-Content -Path $fichierlog -value [string]$maj

                    $temp | Add-Member -MemberType NoteProperty -Name "Date" -Value (get-date).ToString("yyyy-MM-dd")
                    $temp | Add-Member -MemberType NoteProperty -Name "count" -Value ([string]$i +"/"+ [string]($ListeDHCP|measure).count)
                    $temp | Add-Member -MemberType NoteProperty -Name "nomPc" -Value $pc.name
                    $temp | Add-Member -MemberType NoteProperty -Name "KB" -Value $maj.KB
                    $temp | Add-Member -MemberType NoteProperty -Name "titre" -Value $maj.title
                    $temp | Add-Member -MemberType NoteProperty -Name "DateMaj" -Value $maj.LastDeploymentChangeTime
                    $temp | Add-Member -MemberType NoteProperty -Name "taille" -Value $maj.size
                    $temp | Add-Member -MemberType NoteProperty -Name "Reboot" -Value $maj.RebootRequired  
                #ajoute l'objet à la collection
                $listeMaj.Add($temp) | Out-Null
            }
            #clear-variable maj,temp -erroraction SilentlyContinue
        }
        clear-variable result -erroraction SilentlyContinue
    }
    Clear-Variable pc -erroraction SilentlyContinue
}


$listeMaj |  Export-Csv -Path "\\domaine.local\service\Info\ScriptAuto\$nomFichier" -NoTypeInformation -Delimiter ";" -Encoding UTF8 
Add-Content -Path $fichierlog -value $Error

#$listeMaj |ft

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

Plus d'informations
il y a 2 ans 10 mois #30923 par Arnaud Petitjean
Hello,

Vue la complexité de ton script, je suis plus que surpris qu'il n'y ait pas d'erreur...

Essaie d'en introduire une dans ton script, par exemple : 
Remove-Item C:\temp\fichierquinexistepas.txt

Et regarde si l'erreur est bien logguée.

Pour envoyer les erreurs dans le fichier, personnellement j'aurai plutôt écrit ceci:
$error | Out-File -Filepath C:\errorlog.txt
Mais un Add-Content, comme tu as fait devrait fonctionner pourtant...

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.

Plus d'informations
il y a 2 ans 10 mois #30924 par rhiwotar
Salut,

En testant ton bout de script d'erreur, cela n'a pas été concluant,
j'ai donc relu mon script calmement, et après plusieurs tests, je me suis rendu compte que le break ligne 39 non seulement sortait de la boucle comme prévu mais il me sortait surtout du script.
J'en ai profité pour optimiser 2-3 trucs

j'espère que c'est résolu sur le long terme.

Merci du coup de main

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

Plus d'informations
il y a 2 ans 10 mois #30925 par Arnaud Petitjean
Hello !

C'est ce que je m'étais dit aussi à la lecture de ton script mais je lui ai laissé (à Break) le bénéficie du doute. Personnellement je ne l'utilise jamais.

Content si nos échanges ont pu t'aider. ;-)

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.078 secondes
Propulsé par Kunena