Question Accès refusé avec -Wait

Plus d'informations
il y a 11 ans 4 mois #18440 par Benjamin
Accès refusé avec -Wait a été créé par Benjamin
Bonjour à tous!

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.

Plus d'informations
il y a 11 ans 4 mois #18441 par Laurent Dardenne
Salut,
xakan écrit:

Je souhaite donc que le script attende la fin du processus uninst.exe par exemple, avant de poursuivre, j'ai donc rajouté -Wait.

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.
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.

Plus d'informations
il y a 11 ans 4 mois #18444 par Benjamin
Réponse de Benjamin sur le sujet Re:Accès refusé avec -Wait
Salut,

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.

Plus d'informations
il y a 11 ans 4 mois #18445 par Laurent Dardenne
xakan écrit:

Peux-tu m'expliquer un peu plus à quoi sert chaque code, et m'expliquer quoi en faire?

Pour le moment laisse le second code de côté.
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:

Pour info, je suis totalement débutant,

Ne pas hésiter à le préciser.
xakan écrit:

et j'aime pas faire quand je ne comprends pas...

Je partage ton approche, ceci dit il peut y avoir beaucoup à faire avant de comprendre.
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.

Plus d'informations
il y a 11 ans 4 mois #18447 par Benjamin
Réponse de Benjamin sur le sujet Re:Accès refusé avec -Wait
Alors pour commencer, voici ce que j'ai eu le temps de la désinstallation de CCleaner :

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.

Plus d'informations
il y a 11 ans 4 mois #18450 par Laurent Dardenne
xakan écrit:

Merci pour ton aide :)

C'est à dire ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.056 secondes
Propulsé par Kunena