Question Executer un script avec une elevation de privilège

Plus d'informations
il y a 13 ans 4 mois #13122 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

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

Plus d'informations
il y a 13 ans 3 mois #13123 par Matthew BETTON
Bonjour,

[code:1]$script=[string]::join(\&quot;`r`n\&quot;,(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.

Plus d'informations
il y a 13 ans 3 mois #13124 par SiSMik
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

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

Plus d'informations
il y a 13 ans 3 mois #13126 par julien
Merci beaucoup,
ça fonctionne parfaitement !!

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

Plus d'informations
il y a 13 ans 3 mois #13313 par julien
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 = \&quot;Barre de progression - 1\&quot;
$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=\&quot;test\&quot;
$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.

Plus d'informations
il y a 13 ans 3 mois #13316 par SiSMik
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.

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

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