2017-09-13 2 views
0

im écrire un script dans PowerShell qui affiche les services s'exécutant sur un ordinateur et démarrer les services qui ne sont pas en cours d'exécution. Ma commande est la suivantepowershell Erreur de syntaxe ')' dans le script

Afficher tous les services sur Powershell avec startmode "Auto"

$shse = Get-CimInstance -ClassName win32_service -Computername pshells ' 
    -Filter "startmode = 'auto'" | 
    ConvertTo-Html 

service démarrer tous les services avec le statut = arrêté.

$Service = (Get-CimInstance -ClassName win32_service - Computername pshells ' 
    -Filter "startmode = 'auto'") 

If ($Service.status -eq "Stopped"){ 
     Start-Service} 

Else {} 

Convertir la sortie au format HTML.

ConvertTo-Html -body "$shse " | 

Out-File C:\Scripts\Service.htm 

Lors de l'exécution de cette PowerShell je reçois cette erreur

At line:6 char:30 
+  -Filter "startmode = 'auto'") 
+         ~ 
Unexpected token ')' in expression or statement. 
    + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordExceptio 
    n 
    + FullyQualifiedErrorId : UnexpectedToken 
+0

Je n'arrive pas à résoudre le problème? lors de la suppression de ')' le paramètre entier n'est pas valide –

+0

Autant que je puisse voir, il y a quelque chose qui cloche avec vos paires de quotes: la simple citation derrière 'pshells' n'est pas fermée. – iRon

+0

Qu'avez-vous édité Rohit? Il n'est toujours pas valide –

Répondre

0

Remplacez votre code existant avec ceci:

$Services =Get-CimInstance -ClassName win32_service -Computername pshells -Filter "startmode = 'auto'" 
foreach($service in $Services) 
{ 
    If ($Service.state -eq "Stopped"){Start-Service} 
    Else {"Service is already running."} 
} 

Peu de choses que vous devez garder à l'esprit, si vous souhaitez utilisez une continuation de ligne alors vous devez utiliser baktick (`) pas de guillemets simples (').

Vous obtenez tous les services statut et vous souhaitez tous les démarrer si elle est arrêtée. Donc, dans l'ensemble, tout le retour sera OK depuis que vous vérifiez le statut. Vous devez vérifier l'état et non l'état.

Dans l'ensemble, si elle est de retour et au cas où l'un d'entre eux est déjà en cours d'exécution, alors PS aura conflit dans la condition, c'est quand vous devez utiliser foreach boucle.

itérez chaque valeur que vous avez dans $ services, vérifiez l'état et prenez les mesures nécessaires et bouclez; procéder de la même manière pour la suivante à moins que la liste ne soit épuisée.

J'espère que cela vous aide.

1

essayez ceci:

Get-Service -ComputerName pshells | where {$_.StartType -EQ 'Automatic' -and $_.Status -eq 'Stopped'} | Start-Service 
0

donc je suis la commande au travail, je tapé dans ce qui suit

Do 
{ 

$shse = Get-CimInstance -ClassName win32_service -Computername WIN-9HMIGR3QFE6 -Filter "startmode = 'auto'" | 
    ConvertTo-Html 

$Service = (Get-CimInstance -ClassName win32_service -Computername WIN-9HMIGR3QFE6 -Filter "startmode = 'auto'") 

If ($Service.status -eq "Stopped"){ 

     Start-Service} 

Else {} 

ConvertTo-Html -body "$shse " | 

Out-File C:\Test\Service01.html 

Start-sleep -Seconds 600 

}until ($infinity) 

Il a créé un html, où je peux regarder les services ... Mais il y a un problème, quand je ferme un service, le script est configuré pour redémarrer tous les scripts après 600 secondes, mais le service ne se lève jamais .. Donc maintenant la fonction de service stop-start ne fonctionne pas correctement

0

Sur la ligne:

$Service = (Get-CimInstance -ClassName win32_service - Computername pshells ' 
    -Filter "startmode = 'auto'") 

Vous n'utilisez pas un back-tique (`) vous utilisez une apostrophe ('). Il devrait être un back-tick pour échapper à la nouvelle ligne.