Question
WhatIf actif ou non
- laucaz
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 48
- Remerciements reçus 0
il y a 1 an 8 mois #33041
par laucaz
Réponse de laucaz sur le sujet WhatIf actif ou non
Salut Laurent,
Ca me plait bien comme approche .
Normalement je devrais avoir un peu de temps cet aprem .... on va tester .
Je te tiens au courant.
Merci pour ton aide.
Laurent
Ca me plait bien comme approche .
Normalement je devrais avoir un peu de temps cet aprem .... on va tester .
Je te tiens au courant.
Merci pour ton aide.
Laurent
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 1 an 8 mois #33043
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet WhatIf actif ou non
Une autre approche concernant ton code utilisant l'AST :On ici constate que -WhatIf:$false est présent dans le code, mais inexistant lors du Binding, avec ton code on doit donc tester sa présence ET sa valeur.
$code = @'
function get-value{return $false}
foreach ($profil in $RepARech){
Remove-Item -path $profil -recurse -force -verbose
Remove-Item -path $profil -recurse -force -verbose -WhatIf
Remove-Item -path $profil -recurse -force -verbose -WhatIf:$true
Remove-Item -path $profil -recurse -force -verbose -WhatIf:$false
Remove-Item -path $profil -recurse -force -verbose -WhatIf:(get-value)
}
'@
#definition des variables necessaires à AST
$AST = [System.Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null)
# Type d'object que AST doit renvoyer
$predicate = {param($astObject) $astObject -is [System.Management.Automation.Language.CommandAst] }
# recherche recursive dans le code
$recurse = $true
#parcours du code et enregistrement de ce qu'on cherche dans une variable
$Commands = $AST.FindAll($predicate, $recurse)
foreach($command in $Commands)
{
$Binding=[System.Management.Automation.Language.StaticParameterBinder]::BindCommand($Command)
if ($Binding.BoundParameters.ContainsKey('Whatif'))
{
Write-Warning "$($Command -as [string])`r`n $($Binding.BoundParameters.Whatif|select *|out-string -width 125)"
$Binding.BoundParameters.Whatif.value.Gettype().FullName
}
}
Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: laucaz
Connexion ou Créer un compte pour participer à la conversation.
- laucaz
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 48
- Remerciements reçus 0
il y a 1 an 8 mois #33047
par laucaz
Réponse de laucaz sur le sujet WhatIf actif ou non
Je viens de tester l'approche précédente (-Whatif:$DesactiveWhatif) c'est exactement ce que je cherchais . En plus si l'utilisateur ne passe passe par le parametre -force au lancement l'execution ne sera qu'une simulation, sais avoir à prevoir d'interaction utilisateur dans le script... C'est genial
Le test que je viens de faire, creation et suppression de repertoire :
Merci Laurent pour ton aide
Le test que je viens de faire, creation et suppression de repertoire :
param(
$Name,
[Switch]$Force
)
$path ='c:\temp\test\'+$Name
function Test {
[CmdletBinding(SupportsShouldProcess)]
param( $name)
if ($PSCmdlet.ShouldProcess($name))
{ Write-Host "Whatif absent. On effectue le traitement."
# $path ='c:\temp\test\'
# New-Item -Path $path -ItemType directory -Name $name
Remove-Item -path $path -recurse -force -verbose
}
else
{ Write-Host "Whatif présent.On simule le traitement."
# $path ='c:\temp\test\'
# New-Item -Path $path -ItemType directory -Name $name -whatif
Remove-Item -path $path -recurse -force -verbose -whatif
}
}
#Si -Force on désactive Whatif, en inversant la valeur du boolean
#$Whatif:$False exécute le traitement
$DesactiveWhatif=-not $Force.isPresent
#Test -Name 'Nom' -Whatif:$DesactiveWhatif
Test -Name $Name -Whatif:$DesactiveWhatif
<#
.\Test.ps1 'Name'
.\Test.ps1 'Name' -Force
.\Test.ps1 'Name' -Force:$false
#>
Merci Laurent pour ton aide
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.120 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- WhatIf actif ou non