Question
Accès refusé avec -Wait
- Benjamin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 14
- Remerciements reçus 0
Je viens vers vous car j'ai un petit soucis pour installer un logiciel via la commande start-process.
Déjà, voici mon code :
[code:1]
$Poste = $env:COMPUTERNAME
$Type = [Microsoft.Win32.RegistryHive]::LocalMachine
$RemoteRegistry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($Type, $Poste)
$RegKeyBis = $RemoteRegistry.OpenSubKey($ClefBis)
$UninstCCleaner = \"C:\Program Files\CCleaner\uninst.exe\"
$InstCCleaner = \"\\srv\Install\prog\ccsetup406.exe\"
$ParamCCleaner = \"/S EULA_ACCEPT=YES /L=1036\"
foreach($Key in $RegKeyBis.GetSubKeyNames())
{
# Récupération du nom du programmes et de sa version
$SubKey = $RegKeyBis.OpenSubKey($key)
$MonObjet = \"\" | Select DisplayName,Version
$MonObjet.DisplayName = $SubKey.GetValue(\"DisplayName\"«»)
$MonObjet.Version = $SubKey.GetValue(\"DisplayVersion\"«»)
# Vérification de la présence des programmes, et de la présence de la bonne version
if($MonObjet.DisplayName -match \"CCleaner\"«») {
if($MonObjet.Version -eq $CCleanerVersion) {
$CCleanerInstalle = \"True\"
} else {
ADD-content -path $LogFile -value \"Version obsolète de CCLeaner\"
ADD-content -path $LogFile -value \"Désinstallation de la version actuelle\"
start-process $UninstCCleaner \"/S\" -Wait
ADD-content -path $LogFile -value \"Désinstallation terminée\"
ADD-content -path $LogFile -value \"Installation de la version courante\"
start-process $InstCCleaner $ParamCCleaner -Wait
$CCleanerInstalle = \"True\"
ADD-content -path $LogFile -value \"Installation terminée\"
}
[/code:1]
Je souhaite donc que le script attende la fin du processus uninst.exe par exemple, avant de poursuivre, j'ai donc rajouté -Wait.
Cependant, d'une part le script n'attend pas, et d'autre part, j'ai ce message d'erreur dans PowerShell :
Start-Process : Accès refusé
Au niveau de C:\Users\benjamin.faliere\Desktop\scripts_logiciels\test.ps1 : 145 Caractère : 17
+ start-process <<<< $InstCCleaner $ParamCCleaner -Wait
+ CategoryInfo : NotSpecified: ([Start-Process], Win32Exception
+ FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.StartProcessCommand
Quelqu'un aurait-il une idée de l'origine de l'erreur?
Merci par avance pour votre aide,
Xakan.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
xakan écrit:
Les 'installeurs' peuvent exécuter un autre process puis se terminer, dans ce cas bien que le code soit correct il ne répond pas au problème.Je souhaite donc que le script attende la fin du processus uninst.exe par exemple, avant de poursuivre, j'ai donc rajouté -Wait.
Pour confirmer mes propos essaie ceci en local :
[code:1]
$Query=@\"
Select * from __InstanceCreationEvent within 1
where targetinstance isa 'Win32_Process'
\"@
$Action = {
$Target=$event.SourceEventArgs.Newevent.TargetInstance
$S=\"Process créé {0} {1}\{2} : {3}\"
$msg= $S –F $Target.Handle,$Target.ExecutablePath,$Target.Name,$Target.CommandLine
Write-Warning $msg
}#$Action
Register-WMIEvent -query $Query -sourceIdentifier \"TraceCreateProcess\" -action $Action > $Null
$Query=@\"
Select * from __InstanceDeletionEvent within 1
where targetinstance isa 'Win32_Process'
\"@
$Action = {
$Target=$event.SourceEventArgs.Newevent.TargetInstance
$S=\"Process détruit {0} {1}\{2}\"
$msg= $S –F $Target.Handle,$Target.ExecutablePath,$Target.Name
Write-Warning $msg
}#$Action
Register-WMIEvent -query $Query -sourceIdentifier \"TraceDestroyProcess\" -action $Action > $Null
[/code:1]
Reste à ajouter le champ process parent dans le message, une piste :
[code:1]
Function Get-ParentProcess {
#Permet de retrouver le process parent ayant exécuté
#la session Powershell exécutant ce script/module
param( $ID )
$ParentID=$ID
$Result=@(
Do {
$Process=Get-WmiObject Win32_Process -Filter \"ProcessID='$parentID'\" -property Name,CommandLine,ParentProcessID
$ParentID=$Process.ParentProcessID
try {
get-process -ID $ParentID
$exit=$true
}
catch [Microsoft.PowerShell.Commands.ProcessCommandException] {
$exit=$false
}
} until ($Exit)
)
$ofs='.'
[Array]::Reverse($Result)
,$Result
} #Get-ParentProcess
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 20/11/14 14:05
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Benjamin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 14
- Remerciements reçus 0
Merci d'avoir pris le temps de me répondre, mais je t'avoue que je n'ai rien compris à ta réponse... Peux-tu m'expliquer un peu plus à quoi sert chaque code, et m'expliquer quoi en faire?
Pour info, je suis totalement débutant, et j'aime pas faire quand je ne comprends pas...
Merci
Xakan.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Pour le moment laisse le second code de côté.Peux-tu m'expliquer un peu plus à quoi sert chaque code, et m'expliquer quoi en faire?
Pour le premier tu l'exécutes avant de lancer ta ligne de commande d'installation.
Si ce process en exécute un autre de transitoire avant de se terminer, ce code t'affichera les process exécutés. Tous les process.
Le second code permettait de retrouver la filiation de process. Qui est le père? Qui est le fils ?
xakan écrit:
Ne pas hésiter à le préciser.Pour info, je suis totalement débutant,
xakan écrit:
Je partage ton approche, ceci dit il peut y avoir beaucoup à faire avant de comprendre.et j'aime pas faire quand je ne comprends pas...
Il faut à mon avis quelques fois accepter de faire sans comprendre, sans pour autant s'en satisfaire.
La Patience n'est pas moderne.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Benjamin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 14
- Remerciements reçus 0
AVERTISSEMENT : Process créé 4192 \consent.exe :
AVERTISSEMENT : Process détruit 4192 \consent.exe
AVERTISSEMENT : Process créé 2908 \conhost.exe :
AVERTISSEMENT : Process créé 4728 \schtasks.exe :
AVERTISSEMENT : Process créé 4972 \Au_.exe :
AVERTISSEMENT : Process créé 5712 \dllhost.exe :
AVERTISSEMENT : Process créé 5868 \dllhost.exe :
AVERTISSEMENT : Process détruit 2908 \conhost.exe
AVERTISSEMENT : Process détruit 4728 \schtasks.exe
AVERTISSEMENT : Process créé 3836 \SearchFilterHost.exe :
AVERTISSEMENT : Process créé 5184 \SearchProtocolHost.exe :
AVERTISSEMENT : Process détruit 5712 \dllhost.exe
AVERTISSEMENT : Process détruit 5868 \dllhost.exe
AVERTISSEMENT : Process détruit 4972 \Au_.exe
Puis durant l'installation :
AVERTISSEMENT : Process créé 2852 \consent.exe :
AVERTISSEMENT : Process détruit 2972 \ccsetup406.exe
AVERTISSEMENT : Process créé 3248 \dllhost.exe :
AVERTISSEMENT : Process créé 5996 C:\Windows\system32\igfxsrvc.exe\igfxsrvc.exe : C:\Windows\system32\igfxsrvc.exe
-Embedding
AVERTISSEMENT : Process détruit 2852 \consent.exe
AVERTISSEMENT : Process créé 4692 \dllhost.exe :
AVERTISSEMENT : Process créé 6024 \ccsetup406.exe :
AVERTISSEMENT : Process créé 4992 \PING.EXE :
AVERTISSEMENT : Process créé 6032 \conhost.exe :
AVERTISSEMENT : Process détruit 3248 \dllhost.exe
AVERTISSEMENT : Process détruit 4992 \PING.EXE
AVERTISSEMENT : Process détruit 6032 \conhost.exe
AVERTISSEMENT : Process créé 3988 \SearchFilterHost.exe :
AVERTISSEMENT : Process créé 4828 \SearchProtocolHost.exe :
AVERTISSEMENT : Process détruit 5996 C:\Windows\system32\igfxsrvc.exe\igfxsrvc.exe
AVERTISSEMENT : Process créé 1244 C:\Windows\system32\DllHost.exe\dllhost.exe : C:\Windows\system32\DllHost.exe
/Processid:{AB8902B4-09CA-4BB6-B78D-A8F59079A8D5}
AVERTISSEMENT : Process détruit 4692 \dllhost.exe
AVERTISSEMENT : Process créé 2588 C:\Windows\system32\DllHost.exe\dllhost.exe : C:\Windows\system32\DllHost.exe
/Processid:{F9717507-6651-4EDB-BFF7-AE615179BCCF}
AVERTISSEMENT : Process détruit 6024 \ccsetup406.exe
AVERTISSEMENT : Process créé 3468 \CCleaner64.exe :
AVERTISSEMENT : Process détruit 1244 C:\Windows\system32\DllHost.exe\dllhost.exe
AVERTISSEMENT : Process détruit 2588 C:\Windows\system32\DllHost.exe\dllhost.exe
AVERTISSEMENT : Process détruit 3468 \CCleaner64.exe
Merci pour ton aide
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
C'est à dire ?Merci pour ton aide
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Accès refusé avec -Wait