Powerhell: Como obter o que-propagar para cmdlets em outro módulo

Eu tenho tentado escrever um código seguro que ofereça suporte ao método ShouldProcess para que meus usuários tenham uma idéia do que um cmdlet deve fazer antes de executá-lo de verdad

No entanto, me deparei com um problema. Se eu chamar um script com -whatif como argumento, $ pscmdlet.ShouldProcess retornará false. Tudo bem e bem. Se eu chamar um cmdlet definido no mesmo arquivo (que possui SupportsShouldProcess = $ true), ele retornará false também.

No entanto, se eu estiver chamando um cmdlet definido em outro módulo que eu carreguei usando o Import-Module, ele retornará true. O contexto -que não parece ser passado para chamadas no outro módulo.

Eu não quero passar manualmente um sinalizador para cada cmdlet. Alguém tem uma solução melhor?

Este problema parece relacionado a estequestã. No entanto, eles não estão falando sobre o problema entre módulo

Exemplo de script:

#whatiftest.ps1
[CmdletBinding(SupportsShouldProcess=$true)]
param()

Import-Module  -name .\whatiftest_module  -Force

function Outer
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    param()
    if( $pscmdlet.ShouldProcess("Outer"))
    {
        Write-Host "Outer ShouldProcess"
    }
    else
    {
        Write-Host "Outer Should not Process"
    }

    Write-Host "Calling Inner"
    Inner
    Write-Host "Calling InnerModule"
    InnerModule
}

function Inner
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    param()

    if( $pscmdlet.ShouldProcess("Inner"))
    {
        Write-Host "Inner ShouldProcess"
    }
    else
    {
        Write-Host "Inner Should not Process"
    }
}

    Write-Host "--Normal--"
    Outer

    Write-Host "--WhatIf--"
    Outer -WhatIf

O Módulo:

#whatiftest_module.psm1
 function InnerModule
 {
    [CmdletBinding(SupportsShouldProcess=$true)]
    param()    

    if( $pscmdlet.ShouldProcess("InnerModule"))
    {
        Write-Host "InnerModule ShouldProcess"
    }
    else
    {
        Write-Host "InnerModule Should not Process"
    }
 }

Resultado

F:\temp> .\whatiftest.ps1
--Normal--
Outer ShouldProcess
Calling Inner
Inner ShouldProcess
Calling InnerModule
InnerModule ShouldProcess
--WhatIf--
What if: Performing operation "Outer" on Target "Outer".
Outer Should not Process
Calling Inner
What if: Performing operation "Inner" on Target "Inner".
Inner Should not Process
Calling InnerModule
InnerModule ShouldProcess

questionAnswers(1)

yourAnswerToTheQuestion