Flash info

"Problems cannot be solved by the same level of thinking that created them."

- Albert Einstein
 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
ludoob
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
[Résolu]execution script en tache planifier - 8/12/17 15:57 bonjour à tous,

contexte :
1 .exécution d'un script en tache planifier qui ne fini pas entièrement.
2 .le même script lancer directement fini correctement

dans le script powershell:
0. RunAs
1 . PSSession sur un serveur de fichier pour avoir les quotas , les resultats dans la variable de l'invoke-command . alertes email , remove-Pssession
2 . création objet Excel pour ecrire les resulat sur un fichier en paratge reseau

probleme :
1. en tache planifier , quotas + alerte mail ok ,le fichier Excel n'est pas renseigné
2. directement , tout fonctionne.

merci pour vos remarques.

Message édité par: ludoob, à: 14/12/17 13:48
  | | L'administrateur a désactivé l'accés public en écriture.
6ratgus
Utilisateur

PowerShelleur Platinum
Messages: 1419
graphgraph
Karma: 102  
Re:execution script en tache planifier - 12/12/17 14:37 salut ludoob

c'est probablement du au double hop !
d'autre explication ici !

essai d'utilisé l'authentification credSSP pour ton invoke-command

sinon ça peut être un problème de droit utilisateur, quel utilisateur utilise tu dans ta tache planifier ?

Message édité par: 6ratgus, à: 12/12/17 14:41
  | | L'administrateur a désactivé l'accés public en écriture.
ludoob
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:execution script en tache planifier - 12/12/17 16:15 en utilisant la commande start-transscript

voici le message d'erreur:
Les result des quotas apres la PSSession
RemoteSigned
Microsoft Excel ne peut accéder au fichier «c:CommandesQuotasCalcul_auto_serveur_de_fichier.xlsx». Plusieurs raisons
sont possibles:

• Le nom du fichier ou le chemin d'accès n’existe pas.
• Ce fichier est actuellement utilisé par un autre programme.
• Le classeur que vous essayez d’enregistrer porte le même nom qu’un classeur actuellement ouvert.
Au caractère C:CommandesQuotasquotas-sfic10.ps1:371 : 2
+ $ExcelWordBook = $ObjExcel.Workbooks.Open($ExcelPath) # ouverture ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: ( [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

un probleme avec System.Runtime.InteropServices.COMException

je ne suis pas développeur , je ne sais pas par ou chercher.

le PSSession sur le serveur de fichier pour avoir les quotas avec un compte du domaine admin du serveur

Pour le fichier excel utilisation du même compte qui les droit pour modifier le fichier excel

Pour l'execution de la tache planifier utilisation du même compte avec le runas .
  | | L'administrateur a désactivé l'accés public en écriture.
6ratgus
Utilisateur

PowerShelleur Platinum
Messages: 1419
graphgraph
Karma: 102  
Re:execution script en tache planifier - 12/12/17 18:09 est il possible d'avoir le script que tu utilise en enlevant les informations sensible (nom de ton entreprise, login, mot de passe, etc)
  | | L'administrateur a désactivé l'accés public en écriture.
ludoob
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:execution script en tache planifier - 13/12/17 14:47
Code:

 #region PSSession $Session = New-PSSession -ComputerName xxxxx-fic -Credential $cred #$resultats = Invoke-Command -Session $Session -ScriptBlock { $Result Invoke-Command -Session $Session -ScriptBlock {               #region capacité disk D:     $DiskInfos Get-WmiObject -class Win32_Volume where $_.driveletter -eq 'D:' } | select Capacity     #    $DiskInfos.Capacity     $Capacity_Letter_D = [System.Math]::Round($DiskInfos.Capacity /1gb)     #    $Capacity_Letter_D     #    $Capacity     #endregion capacité disk D:               #region Calcul quota par rapport aux modeles     #region 10 Go - Bureaux               $UsageQuotas_10GoBureaux Get-FSRMQuota Where-Object $_.Template -eq "10 Go - Bureaux" }     [int]$nbrsFolderQuotas $UsageQuotas_10GoBureaux Measure-Object Select-Object -ExpandProperty count     $nbrsFolderQuotas # result[0]     $quotasTotal $nbrsFolderQuotas 10     #    $quotasTotal     $seuil80poucent $quotasTotal 0.8     #    $seuil80poucent     $UsageQuotas_10GoBureaux Get-FSRMQuota Where-Object $_.Template -eq "10 Go - Bureaux" } | Select-Object Usage Sort-Object Usage Measure-Object -Property Usage -Sum     $resul_UsageQuotas_10GoBureaux = [System.Math]::Round($UsageQuotas_10GoBureaux.sum /1gb)     $resul_UsageQuotas_10GoBureaux # result[1]]     if ($resul_UsageQuotas_10GoBureaux -gt $seuil80poucent)     {         Write-Host "La capacité totale utilisé par le quota 10 Go - Bureaux est de : $resul_UsageQuotas_10GoBureaux Go"  -ForegroundColor Red     }     if ($resul_UsageQuotas_10GoBureaux -ge $seuil80poucent)     {         Write-Host "La capacité totale utilisé par le quota 10 Go - Bureaux est de : $resul_UsageQuotas_10GoBureaux Go"  -ForegroundColor Yellow     }     if ($resul_UsageQuotas_10GoBureaux -lt $seuil80poucent)     {         Write-Host "La capacité totale utilisé par le quota 10 Go - Bureaux est de : $resul_UsageQuotas_10GoBureaux Go"  -ForegroundColor Green     }     #endregion 10 Go - Bureaux          #region 20 Go - Bureaux     $UsageQuotas_20GoBureaux Get-FSRMQuota Where-Object $_.Template -eq "20 Go - Bureaux" }     [int]$nbrsFolderQuotas $UsageQuotas_20GoBureaux Measure-Object Select-Object -ExpandProperty count     $nbrsFolderQuotas # result[2]     $quotasTotal $nbrsFolderQuotas 20     #    $quotasTotal     $seuil80poucent $quotasTotal 0.8     #    $seuil80poucent     $UsageQuotas_20GoBureaux Get-FSRMQuota Where-Object $_.Template -eq "20 Go - Bureaux" } | Select-Object Usage Sort-Object Usage Measure-Object -Property Usage -Sum     $resul_UsageQuotas_20GoBureaux = [System.Math]::Round($UsageQuotas_20GoBureaux.sum /1gb)     $resul_UsageQuotas_20GoBureaux # result[3]     if ($resul_UsageQuotas_20GoBureaux -gt $seuil80poucent)     {         Write-Host "La capacité totale utilisé par le quota 20 Go - Bureaux est de : $resul_UsageQuotas_20GoBureaux Go"  -ForegroundColor Red     }     if ($resul_UsageQuotas_20GoBureaux -ge $seuil80poucent)     {         Write-Host "La capacité totale utilisé par le quota 20 Go - Bureaux est de : $resul_UsageQuotas_20GoBureaux Go"  -ForegroundColor Yellow     }     if ($resul_UsageQuotas_20GoBureaux -lt $seuil80poucent)     {         Write-Host "La capacité totale utilisé par le quota 20 Go - Bureaux est de : $resul_UsageQuotas_20GoBureaux Go"  -ForegroundColor Green     }     #endregion 20 Go - Bureaux               #endregion Calcul quota par rapport aux modeles          #region Calcul total des quotas     $totauxquotas $resul_UsageQuotas_10GoBureaux $resul_UsageQuotas_20GoBureaux     Write-Host "La capacité totale est de : $totauxquotas Go"     $totauxquotas # result [28]     #endregion Calcul total des quotas          #region comparaison quotas et capacite volume D:     $Capacity_Letter_D # result [29]          $seuil80poucent $Capacity_Letter_D 0.8     $seuil80poucent     $seuil95poucent $Capacity_Letter_D 0.95     $seuil95poucent     if ($totauxquotas -ge $seuil95poucent)     {                  $chaine "<head>                 <style>                     table{                         width: auto;                         border: 2px solid black;                         border-collapse: collapse;                     }                     #tocolor{                         background-color:red;                         height:50px;                         font-size:20;                     }                     td{                         border-collapse:collapse;                         border: 2px solid black;                     }                     .erreur{                         border : 2px solid black;                                      overflow:scroll;                     }                     .error{                         border : 2px solid black;                     }                          </style>             </head>             <table>                 <tr id=`"tocolor`" >                    <th >Info  - Quotas sur le serveur FIC - CRITIQUE</th>                      </tr>                 <tr>                                         <td> Le fichier Quotas serveur de fichier a été mis à jour</ td>                 </tr>                 <tr>                                         <td> La capacité totale des quotas est de : $totauxquotas  Go / $Capacity_Letter_D Go de la capacité totale du disque </td>                 </tr>             </table>"         Send-MailMessage -SmtpServer "xxxx.xxx" -To "xxxxx@xxx" -From "alerte-orchestrator@xxxx" - Subject "[Info] Quotas du Serveur de fichier - CRITIQUE" -BodyAsHtml $chaine -Encoding UTF8         Write-Host "La capacité totale des quotas est de : $totauxquotas Go" -ForegroundColor Red     }     if (($totauxquotas -ge $seuil80poucent) -and ($totauxquotas -lt $seuil95poucent))     {                  $chaine = "<head>                 <style>                     table{                         width: auto;                         border: 2px solid black;                         border-collapse: collapse;                     }                     #tocolor{                         background-color:yellow;                         height:50px;                         font-size:20;                     }                     td{                         border-collapse:collapse;                         border: 2px solid black;                     }                     .erreur{                         border : 2px solid black;                                      overflow:scroll;                     }                     .error{                         border : 2px solid black;                     }                          </style>             </head>             <table>                 <tr id=`"tocolor`" >                    <th >Info  Quotas sur le serveur SFIC WARNING</th>                      </tr>                 <tr>                                         <tdLe fichier Quotas serveur de fichier a été mis à jour</td>                 </tr>                 <tr>                                         <tdLa capacité totale des quotas est de $totauxquotas Go $Capacity_Letter_D Go de la capacité totale du disque </td>                 </tr>             </table>"         Send-MailMessage -SmtpServer "xxxx.xxxx" -To "xxxx@xxxxx" -From "alerte-orchestrator@xxx" -Subject "[InfoQuotas du Serveur de fichier WARNING" -BodyAsHtml $chaine -Encoding UTF8         Write-Host "La capacité totale des quotas est de $totauxquotas Go" -ForegroundColor Yellow     }     if ($totauxquotas -lt $seuil80poucent)     {                  $chaine = "<head>                 <style>                     table{                         widthauto;                         border2px solid black;                         border-collapsecollapse;                     }                     #tocolor{                         background-color:green;                         height:50px;                         font-size:20;                     }                     td{                         border-collapse:collapse;                         border2px solid black;                     }                     .erreur{                         border 2px solid black;                                      overflow:scroll;                     }                     .error{                         border 2px solid black;                     }                          </style>             </head>             <table>                 <tr id=`"tocolor`" >                    <th >Info  - Quotas sur le serveur SFIC - OK</th>                      </tr>                 <tr>                                         <td> Le fichier Quotas serveur de fichier a été mis à jour</ td>                 </tr>                 <tr>                                         <td> La capacité totale des quotas est de : $totauxquotas  Go / $Capacity_Letter_D Go de la capacité totale du disque </td>                 </tr>             </table>"         Send-MailMessage -SmtpServer "xxxxxxxx.xxxx" -To "xxx@x" -From "alerte-orchestrator@x" -Subject "[Info] Quotas du Serveur de fichier - OK" -BodyAsHtml $chaine -Encoding UTF8         Write-Host "La capacité totale des quotas est de : $totauxquotas Go" -ForegroundColor Green     }     #endregion comparaison quotas et capacite volume D:                     } remove-pssession $Session #region resultats quotas Write-Host "Les result des quotas apres la PSSession" -ForegroundColor Green $Count_10GoBureaux $Result[0] $Quotas_10GoBureaux $Result[1] $Count_20GoBureaux $Result[2] $Quotas_20GoBureaux $Result[3] $totauxquotas $Result[28] $Capacity_Letter_D $Result[29] #endregion resultats quotas #endregion PSSession # region Excel $ObjExcel = New-Object -ComObject Excel.application $ObjExcel.visible $false # pour cacher le fichier excel #    $ExcelPath = 'C:\Users\xx\Documents\WindowsPowerShell\Scripts\EXCEL\Calcul auto serveur de  fichier.xlsx' $ExcelPath '\\xxxxx\xx\S2\B1\SERVEUR\SFIC\Calcul_auto_serveur_de_fichier.xlsx' $SheetName "SFIC" $ExcelWordBook $ObjExcel.Workbooks.Open($ExcelPath# ouverture du fichier $ExcelWorkSheet2 $ExcelWordBook.Sheets.item($SheetName# ouverture de la Worksheet $ExcelWorkSheet2.Cells.Item(146) = $Result[1#10GoBureaux $ExcelWorkSheet2.Cells.Item(156) = $Result[3#20GoBureaux $ExcelWorkSheet2.Cells.Item(144) = $Result[0] $ExcelWorkSheet2.Cells.Item(154) = $Result[2] #$ExcelWorkSheet2.Columns.autofit() $ExcelWordBook.Save() $ObjExcel.Quit() function Release-Ref ($ref) {     ([System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref) -gt 0)     [System.GC]::Collect()     [System.GC]::WaitForPendingFinalizers() } ## close all object references Release-Ref($ExcelWorkSheet2) Release-Ref($ExcelWordBook) Release-Ref($ObjExcel) #    #endregion Excel



Message édité par: ludoob, à: 13/12/17 15:49

Message édité par: ludoob, à: 13/12/17 15:51
  | | L'administrateur a désactivé l'accés public en écriture.
6ratgus
Utilisateur

PowerShelleur Platinum
Messages: 1419
graphgraph
Karma: 102  
Re:execution script en tache planifier - 13/12/17 18:27 désolé je n'est rien trouver de probant dans ton script


tu peut peut être rajouter juste avant le $ObjExcel.Workbooks.Open($ExcelPath) du fichier excel un test de présence du ficher excel
avec test-path
Code:

 if (Test-Path -Path $ExcelPath) {    write-host "le fichier existe deja" }




sinon je vois pas
mais regarde dans le forum il y a déjà eu plusieurs problèmes avec les taches planifiés peut etre une solution fonctionnera pour toi !
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5437
graph
Karma: 198  
Re:execution script en tache planifier - 14/12/17 11:06 Recherche sur Google avec 'office excel scheduled task'.
Ce post référence des droits DCOM à placer.
Voir créer le profile du compte utilisée par la tâche.
à vérifier...
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5437
graph
Karma: 198  
Re:execution script en tache planifier - 14/12/17 11:28 A lire aussi : Considérations sur l’automatisation côté serveur de Microsoft Office Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
ludoob
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:execution script en tache planifier - 14/12/17 13:51 merci de votre aide ,
ceci a résolu mon problème:
https://social.msdn.microsoft.com/Forums/Lync/en-US/ac2549f5-fc1e-494d-9015-70cb31d3aeb2/opening- excel-workbook-fails-when-run-from-scheduled-task-on-windows-server-2008-rw?forum=exceldev

Mais pourquoi ?

environnment :
OS 2012R2
excel 2016
Ps 5
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5437
graph
Karma: 198  
Re:execution script en tache planifier - 15/12/17 10:07 ludoob écrit:

Mais pourquoi ?

Si tu parles de la création de répertoires, peut être qu'en interne la méthode recherche qq chose dans le répertoire de l'utilisateur exécutant la tâche.

Dans le document MS cité il est dit (entre autres) :
Toutes les versions actuelles de Microsoft Office ont été conçues, testées et configurées pour être exécutées par l’utilisateur final sur une station de travail cliente. Elles requièrent un Bureau interactif et un profil utilisateur et n’offrent pas le niveau de sécurité ou de réentrée nécessaire pour répondre aux besoins des composants côté serveur conçus pour s’exécuter sans assistance.

Si le cœur t'en dit, tu peux analyser avec FileMonitor.
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
ludoob
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:execution script en tache planifier - 15/12/17 11:56 ça ressemble à un dépannage support microsoft car la création du dossier qui n'a pas de lien avec le profil scheduled task.

merci pour lien "Voir créer le profile du compte utilisée par la tâche". dans mon environnement pro tous les sites ne sont pas toujours dispo"

le critère de recherche google à été pertinent.
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5437
graph
Karma: 198  
Re:execution script en tache planifier - 15/12/17 12:36 ludoob écrit:
ça ressemble à un dépannage support microsoft car la création du dossier qui n'a pas de lien avec le profil scheduled task.

Oui, le message d'erreur initial est peut être propagé tel quel par COM au code appelant.
Mais c'est le genre de pb où de connaitre la solution suffit, d'en connaitre les causes réelles est plus difficile. A moins de passer des heures à chercher sur le net
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
© 2018 PowerShell-Scripting.com