2017-03-27 2 views
0

Mon script PowerShell prend un instantané de la caméra IP, il fonctionne sur un Raspberry Pi3 avec Windows 10 IoT Core.Le script s'exécute très lentement via la tâche planifiée

Lorsque j'exécute le script à partir de PowerShell (uniquement de type c:\scripts\snapshot.ps1), il fonctionne très bien. Mais quand je l'exécute à partir de cmd powershell -File c:\scripts\snapshot.ps1 (j'ai besoin de cela pour l'exécution du planificateur de tâches), il prend trop de temps et prend tout le noyau du processeur et après quelques minutes d'exécution je le tue.

La même chose lorsque j'exécute cette commande à partir de powershell (non de cmd). Le script s'arrêtera le Invoke-WebRequest -Uri $url -Headers $Headers -OutFile "$dir\$outFile". Le fichier $outFile est créé, mais sans contenu et est toujours en cours d'exécution. J'observe que le script entier est trop lent, lors de l'exécution du script seulement avec 2 Write-Output, c'est le retard entre 2 chaînes écrites. J'ai essayé -MTA et -NoProfile et un autre argument powershell.exe, mais sans chance.

Mon script:

$user = 'operator' 
$pass = 'password' 
$url = 'http:\\url.jpg' 
$dir = "c:\outputdir" 

$date = Get-Date 
$date = $date.ToString("yyyy-MM-dd_HH-mm-ss") 

$outFile = "snapshot_$date.jpg" 

$pair = "$($user):$($pass)" 

$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair)) 

$basicAuthValue = "Basic $encodedCreds" 

$Headers = @{ 
    Authorization = $basicAuthValue 
} 

Invoke-WebRequest -Uri $url -Headers $Headers -OutFile "$dir\$outFile" 

EDIT: Ma tâche planifiée:

Folder: \ 
HostName:        pi 
TaskName:        \Create-snapshot 
Next Run Time:      3/27/2017 3:32:00 AM 
Status:        Running 
Logon Mode:       Interactive/Background 
Last Run Time:      3/27/2017 3:31:02 AM 
Last Result:       267009 
Author:        pi\Administrator 
Task To Run:       C:\Data\Admin\Create-Snapshot\Create-Snapshot-Start.bat >> "c:\Data\Admin\Create-Snapshot\Log\Create-Snapshot-start 2017-03-27 2_47_25.log" 
Start In:        N/A 
Comment:        N/A 
Scheduled Task State:     Enabled 
Idle Time:       Disabled 
Power Management:      Stop On Battery Mode, No Start On Batteries 
Run As User:       Administrator 
Delete Task If Not Rescheduled:  Disabled 
Stop Task If Runs X Hours and X Mins: 72:00:00 
Schedule:        Scheduling data is not available in this format. 
Schedule Type:      One Time Only, Minute 
Start Time:       12:56:00 AM 
Start Date:       3/27/2017 
End Date:        N/A 
Days:         N/A 
Months:        N/A 
Repeat: Every:      0 Hour(s), 1 Minute(s) 
Repeat: Until: Time:     None 
Repeat: Until: Duration:    Disabled 
Repeat: Stop If Still Running:  Disabled 

J'ai essayé de courir tâche NT AUTHORITY \ SYSTEM - mais pas de chance.

Nous vous remercions de votre temps.

Rob

+0

Comment avez-vous configuré la tâche? Utilisez-vous des commutateurs comme '-NoProfile'? Il y a beaucoup de choses qui se chargent avec PowerShell par défaut qui ferait la même chose dans une tâche configurée si elle n'est pas omise. La plupart des exemples de PowerShell en tâches couvriraient cela. – Matt

+0

J'essaie Powerhell -NoProfile -File "c: \ Data \ Admin \ Créer-Snapshot \ Create-Snapshot.ps1" - lorsqu'il est exécuté à partir de powershell distant avec cette commande ou de la tâche planifiée, il est lent et quand je l'exécute à partir de cmd ou directement ouvrir le script .ps1 dans powershell ISE et exécuter, c'est ok .. –

+0

Cela ressemble à http://serverfault.com/questions/151824/process-runs-slower-as-a-scheduled-task-than-it -does-interactivement –

Répondre

1

Par défaut une tâche est exécutée avec priorité "Inférieure à la normale".

Si vous exportez votre tâche de planificateur de tâches et ouvrez le fichier XML, vous verrez:

<Priority>7</Priority> 

Modifier ceci:

<Priority>4</Priority> 

Save the XML, supprimer la tâche et exécutez le " Tâche d'importation ". Pointez sur votre XML édité et vous devriez trouver que la tâche fonctionne maintenant avec la priorité normale.

Vous pouvez vérifier la priorité en recherchant l'instance de PowerShell dans le gestionnaire de tâches, faites un clic droit et choisissez "Définir la priorité".