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 7 mois 2 semaines #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 : 6298
- Remerciements reçus 68
il y a 7 mois 2 semaines #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 7 mois 2 semaines #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.066 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- WhatIf actif ou non