Question
Executer un script avec une elevation de privilège
- julien
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 13 ans 4 mois #13122
par julien
Executer un script avec une elevation de privilège a été créé par julien
Bonjour à tous,
je souhaiterais exécuter un script avec une élévation de privilège.
je recherche tout les fichiers batch(.cmd) situé dans un répertoire puis je stocke leur chemin dans une variable appelé $script.
Ensuite j’exécute ligne par ligne les scripts trouvé via cette variable.
mon problème, c'est que je n'arrive pas à les exécuter avec cette élévation de privilège. (accès refusé)
[code:1]
$pwd=get-content C:\temp\password.pwd | convertto-securestring
$User=\"test\"
$login=new-object -typename System.Management.Automation.PSCredential -argumentlist $User,$pwd
#récupérer fichier .cmd
$script=[string]::join(\"`r`n\",(Get-ChildItem C:\temp -recurse -Include *.cmd|where-object {$_.PSIsContainer -eq 0}|foreach {$_.Get_FullName()}))
echo \"$script\"
foreach($cmd in $script)
{
Invoke-Expression \"cmd /c $cmd\" | Out-Null
}
[/code:1]
merci pour votre aide
Message édité par: newblur, à: 23/11/12 22:07
Message édité par: newblur, à: 23/11/12 22:07
Message édité par: newblur, à: 23/11/12 22:11<br><br>Message édité par: newblur, à: 23/11/12 22:13
je souhaiterais exécuter un script avec une élévation de privilège.
je recherche tout les fichiers batch(.cmd) situé dans un répertoire puis je stocke leur chemin dans une variable appelé $script.
Ensuite j’exécute ligne par ligne les scripts trouvé via cette variable.
mon problème, c'est que je n'arrive pas à les exécuter avec cette élévation de privilège. (accès refusé)
[code:1]
$pwd=get-content C:\temp\password.pwd | convertto-securestring
$User=\"test\"
$login=new-object -typename System.Management.Automation.PSCredential -argumentlist $User,$pwd
#récupérer fichier .cmd
$script=[string]::join(\"`r`n\",(Get-ChildItem C:\temp -recurse -Include *.cmd|where-object {$_.PSIsContainer -eq 0}|foreach {$_.Get_FullName()}))
echo \"$script\"
foreach($cmd in $script)
{
Invoke-Expression \"cmd /c $cmd\" | Out-Null
}
[/code:1]
merci pour votre aide
Message édité par: newblur, à: 23/11/12 22:07
Message édité par: newblur, à: 23/11/12 22:07
Message édité par: newblur, à: 23/11/12 22:11<br><br>Message édité par: newblur, à: 23/11/12 22:13
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 3 mois #13123
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Executer un script avec une elevation de privilège
Bonjour,
Il y a plus simple :
[code:1]$Scripts = Get-ChildItem C:\temp -recurse -Include *.cmd | Where-Object {$_.PSIsContainer -eq $false} | Select-Object -ExpandProperty FullName
[/code:1]
Utilises ensuite la Cmdlet 'Start-Process' :
[code:1]
$Credential = Get-Credential
$Scripts = Get-ChildItem C:\temp -recurse -Include *.cmd | Where-Object {$_.PSIsContainer -eq $false} | Select-Object -ExpandProperty FullName
foreach($ScriptPath in $Scripts){
Start-Process -FilePath $ScriptPath -Credential $Credential -Wait
}[/code:1]
Ici j'utilise le paramètre '-Wait' qui permet d'attendre la fin de l'exécution du script avant d'exécuter le suivant.
J'ai remplacé ta méthode pour la récupération du login / mot de passe (méthode interactive) mais tu peux utiliser la tienne....
Pour plus d'informations sur 'Start-Process' :
[code:1]Get-Help Start-Process -Full[/code:1]
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 24/11/12 09:01
[code:1]$script=[string]::join(\"`r`n\",(Get-ChildItem C:\temp -recurse -Include *.cmd|where-object {$_.PSIsContainer -eq 0}|foreach {$_.Get_FullName()}))[/code:1]
Il y a plus simple :
[code:1]$Scripts = Get-ChildItem C:\temp -recurse -Include *.cmd | Where-Object {$_.PSIsContainer -eq $false} | Select-Object -ExpandProperty FullName
[/code:1]
Utilises ensuite la Cmdlet 'Start-Process' :
[code:1]
$Credential = Get-Credential
$Scripts = Get-ChildItem C:\temp -recurse -Include *.cmd | Where-Object {$_.PSIsContainer -eq $false} | Select-Object -ExpandProperty FullName
foreach($ScriptPath in $Scripts){
Start-Process -FilePath $ScriptPath -Credential $Credential -Wait
}[/code:1]
Ici j'utilise le paramètre '-Wait' qui permet d'attendre la fin de l'exécution du script avant d'exécuter le suivant.
J'ai remplacé ta méthode pour la récupération du login / mot de passe (méthode interactive) mais tu peux utiliser la tienne....
Pour plus d'informations sur 'Start-Process' :
[code:1]Get-Help Start-Process -Full[/code:1]
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 24/11/12 09:01
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 13 ans 3 mois #13124
par SiSMik
Réponse de SiSMik sur le sujet Re:Executer un script avec une elevation de privilège
Salut,
Tu peux aussi le faire avec un One liner ça fait plus cool ^^
[code:1]gci C:\temp -recurse -Include *.cmd | ? {!$_.PSIsContainer} | select -ExpandProperty FullName | % { start $_ -Credential (Get-Credential) -Wait }[/code:1]<br><br>Message édité par: benduru, à: 25/11/12 12:48
Tu peux aussi le faire avec un One liner ça fait plus cool ^^
[code:1]gci C:\temp -recurse -Include *.cmd | ? {!$_.PSIsContainer} | select -ExpandProperty FullName | % { start $_ -Credential (Get-Credential) -Wait }[/code:1]<br><br>Message édité par: benduru, à: 25/11/12 12:48
Connexion ou Créer un compte pour participer à la conversation.
- julien
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 13 ans 3 mois #13126
par julien
Réponse de julien sur le sujet Re:Executer un script avec une elevation de privilège
Merci beaucoup,
ça fonctionne parfaitement !!
ça fonctionne parfaitement !!
Connexion ou Créer un compte pour participer à la conversation.
- julien
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 13 ans 3 mois #13313
par julien
Réponse de julien sur le sujet Re:Executer un script avec une elevation de privilège
je reviens à la charge désolé 
je souhaiterais utiliser le script ci-dessous afin de voir graphiquement l'évolution des mes installations
[code:1]
[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
#
# Timer
$timer = new-object System.Windows.forms.timer
$timer.Interval = 1000 # 1 seconde
#
# progressBar1
#
$progressBar1 = new-object System.Windows.Forms.ProgressBar
$progressBar1.Location = new-object System.Drawing.Point(58, 107)
$progressBar1.Name = 'progressBar1'
$progressBar1.Size = new-object System.Drawing.Size(164, 23)
$progressBar1.Value = 0
$progressbar1.style = 'continuous'
$progressbar1.step = 1
#
# Label1
#
$label1 = new-object System.Windows.Forms.Label
$label1.Location = new-object System.Drawing.Point(70, 70)
$label1.Size = new-object System.Drawing.Size(139,13)
$label1.Text = 'Style continuous :'
#
$Form1 = new-object System.Windows.Forms.form
# Form1
#
$Form1.Controls.Add($label1)
$Form1.ClientSize = new-object System.Drawing.Size(284, 264)
$Form1.Controls.Add($progressBar1)
$Form1.Text = \"Barre de progression - 1\"
$timer.Add_Tick({
$progressBar1.PerformStep()
})
$timer.Start()
$Form1.ShowDialog()
[/code:1]
source: www.powershell-scripting.com/index.php?o...id=232&Itemid=73
malheureusement, je n'arrive pas (ou comprend pas!!) comment masquer l'invite de commande lors de l’exécutions des scripts (.cmd) et afficher uniquement la progression de la barre.
j’exécute mon script .ps1 depuis un .cmd
extrait du code d’exécution des .cmd
[code:1]
$key=(1..16)
$pwd=get-content C:\temp\encrypted.txt | convertto-securestring -key (1..16)
$User=\"test\"
$login=new-object -typename System.Management.Automation.PSCredential -argumentlist $User,$pwd
#recherche tout les fichiers .cmd
$Scripts = Get-ChildItem C:\temp -recurse -Include *.cmd -Exclude RunPostconf.cmd | Where-Object {$_.PSIsContainer -eq $false} | Select-Object -ExpandProperty FullName
#execution des scripts .cmd
foreach($ScriptPath in $Scripts)
{
$process=Start-Process -FilePath $ScriptPath -Credential $login -PassThru
$times=0
while(-not $process.hasexited -and $times -lt 30)
{
Start-Sleep -Seconds 1
$times++
}
}
[/code:1]
une idée ?
je vous remercie<br><br>Message édité par: newblur, à: 14/12/12 00:19
je souhaiterais utiliser le script ci-dessous afin de voir graphiquement l'évolution des mes installations
[code:1]
[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
#
# Timer
$timer = new-object System.Windows.forms.timer
$timer.Interval = 1000 # 1 seconde
#
# progressBar1
#
$progressBar1 = new-object System.Windows.Forms.ProgressBar
$progressBar1.Location = new-object System.Drawing.Point(58, 107)
$progressBar1.Name = 'progressBar1'
$progressBar1.Size = new-object System.Drawing.Size(164, 23)
$progressBar1.Value = 0
$progressbar1.style = 'continuous'
$progressbar1.step = 1
#
# Label1
#
$label1 = new-object System.Windows.Forms.Label
$label1.Location = new-object System.Drawing.Point(70, 70)
$label1.Size = new-object System.Drawing.Size(139,13)
$label1.Text = 'Style continuous :'
#
$Form1 = new-object System.Windows.Forms.form
# Form1
#
$Form1.Controls.Add($label1)
$Form1.ClientSize = new-object System.Drawing.Size(284, 264)
$Form1.Controls.Add($progressBar1)
$Form1.Text = \"Barre de progression - 1\"
$timer.Add_Tick({
$progressBar1.PerformStep()
})
$timer.Start()
$Form1.ShowDialog()
[/code:1]
source: www.powershell-scripting.com/index.php?o...id=232&Itemid=73
malheureusement, je n'arrive pas (ou comprend pas!!) comment masquer l'invite de commande lors de l’exécutions des scripts (.cmd) et afficher uniquement la progression de la barre.
j’exécute mon script .ps1 depuis un .cmd
extrait du code d’exécution des .cmd
[code:1]
$key=(1..16)
$pwd=get-content C:\temp\encrypted.txt | convertto-securestring -key (1..16)
$User=\"test\"
$login=new-object -typename System.Management.Automation.PSCredential -argumentlist $User,$pwd
#recherche tout les fichiers .cmd
$Scripts = Get-ChildItem C:\temp -recurse -Include *.cmd -Exclude RunPostconf.cmd | Where-Object {$_.PSIsContainer -eq $false} | Select-Object -ExpandProperty FullName
#execution des scripts .cmd
foreach($ScriptPath in $Scripts)
{
$process=Start-Process -FilePath $ScriptPath -Credential $login -PassThru
$times=0
while(-not $process.hasexited -and $times -lt 30)
{
Start-Sleep -Seconds 1
$times++
}
}
[/code:1]
une idée ?
je vous remercie<br><br>Message édité par: newblur, à: 14/12/12 00:19
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 13 ans 3 mois #13316
par SiSMik
Réponse de SiSMik sur le sujet Re:Executer un script avec une elevation de privilège
Bonjour,
A l'avenir, essayez de regarder l'aide intégrée dans powershell, on y trouve tout.
Si vous faites
[code:1]Get-Help Start-Process[/code:1]
Vous allez alors, apercevoir un magnifique paramètre qui s'appelle WindowStyle avec des valeurs possibles et notamment 'hidden'.
ça devrait résoudre votre problème de fenêtre visible.
Par contre, si vous n'utilisez pas des jobs, vous risquez de figer votre GUI lors de l'exécution de longs scripts.
A l'avenir, essayez de regarder l'aide intégrée dans powershell, on y trouve tout.
Si vous faites
[code:1]Get-Help Start-Process[/code:1]
Vous allez alors, apercevoir un magnifique paramètre qui s'appelle WindowStyle avec des valeurs possibles et notamment 'hidden'.
ça devrait résoudre votre problème de fenêtre visible.
Par contre, si vous n'utilisez pas des jobs, vous risquez de figer votre GUI lors de l'exécution de longs scripts.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.052 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Executer un script avec une elevation de privilège