2017-07-06 3 views
2

Je suis en train de créer un script Powershell qui sera déployé sur n'importe quel noeud affichant une mauvaise mise à jour pour automatiser certaines tâches simples sans avoir à interrompre les utilisateurs pendant leur exécution. journée de travail. Le script Powershell fonctionne parfaitement s'il est exécuté à partir d'une invite PS élevée. Il fonctionne également correctement lorsque le même script est déployé sur une machine de test via SCCM, à une exception près: il n'appelle pas SFC.EXE /SCANNOW.Exécution de SFC.EXE à partir du script Powershell déployé via SCCM

J'ai essayé d'utiliser:

Start-Process -FilePath "${env:Windir}\System32\SFC.EXE" -ArgumentList '/scannow' -Wait -NoNewWindow 
Start-Process -FilePath "sfc.exe" -ArgumentList '/scannow' -Wait -NoNewWindow 
Start-Process -FilePath "${env:Windir}\System32\SFC.EXE" -ArgumentList '/scannow' -RedirectStandardOutput "C:\SFC-Out.log" -RedirectStandardError "C:\SFC-Err.log" -Wait -NoNewWindow 
& "sfc.exe" "/scannow" 
Invoke-Command -ScriptBlock { sfc.exe /scannow } 

Encore une fois, tous ces exemples fonctionnent exactement comme prévu lorsqu'il est exécuté à partir d'une invite élevée PS, mais ne parviennent lorsqu'il est exécuté à partir du script PowerShell déployé. Quand je l'-RedirectStandardOutput, j'ai vérifié le fichier SFC-out.log et lu:

« Protection des ressources Windows n'a pas pu démarrer le service de réparation »

Je pense que c'est parce que SCCM exécute des programmes/scripts dans le contexte SYSTEM au lieu d'un contexte utilisateur (ou même un contexte utilisateur élevé, mais SYSTEM est supposé être plus haut qu'une session élevée).

Existe-t-il un moyen d'accomplir ceci? Désolé pour le mauvais formatage, ceci est mon premier article sur ce site.

+0

Essayez simplement de définir 'ProcessStartInfo.Verb' sur' RunAs'. Vous pouvez exécuter votre processus avec les privilèges des administrateurs en utilisant cette option. Malheureusement, vous ne pouvez pas utiliser 'Verb' et' RedirectStandardOutput' ensemble, [voir] (https://stackoverflow.com/a/3596354) –

+0

Cela ne ferait-il pas apparaître une fenêtre demandant des informations d'identification alors? Je suis d'accord pour ne pas utiliser 'RedirectStandardOutput', c'était une étape de dépannage quand même pour savoir pourquoi' SFC' ne se lançait pas. –

+0

Vous pouvez définir les informations d'identification sur "ProcessStartInfo.Password" et "ProcessStartInfo.UserName", afin qu'il ne vous demande pas d'informations d'identification, mais il peut vous demander de confirmer le processus de démarrage avec les privilèges d'administrateur. Si vous souhaitez exécuter le processus en tant qu'administrateur sans confirmation, vous pouvez réduire les autorisations UAC –

Répondre

0

Un peu en retard mais j'ai rencontré le même problème. Vous ne savez pas si c'est le cas pour vous, mais la cause était la configuration du déploiement du script avec SCCM pour qu'il s'exécute comme un processus 32 bits. Le script était en cours de déploiement sur des systèmes 64 bits. Lorsque je désélectionnais "Exécuter en tant que processus 32 bits" dans la configuration de déploiement, SFC fonctionnait sans problème dans le contexte d'un compte système.