Question WhatIf actif ou non

Plus d'informations
il y a 1 an 3 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

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

Plus d'informations
il y a 1 an 3 mois #33043 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet WhatIf actif ou non
Une autre approche concernant ton code utilisant l'AST :
$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

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

Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: laucaz

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

Plus d'informations
il y a 1 an 3 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 :
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.119 secondes
Propulsé par Kunena