相关疑难解决方法(0)

Powershell:如何让-whatif传播到另一个模块中的cmdlet

我一直在尝试使用ShouldProcess方法编写支持-whatif的安全代码,这样我的用户就可以了解cmdlet在真正运行之前应该做什么.

但是我遇到了一些障碍.如果我用-whatif作为参数调用脚本,$ pscmdlet.ShouldProcess将返回false.一切都很好.如果我调用在同一文件中定义的cmdlet(具有SupportsShouldProcess = $ true),它也将返回false.

但是,如果我调用另一个模块中定义的cmdlet,我已使用Import-Module加载,它将返回true.-whatif上下文似乎没有传递给另一个模块中的调用.

我不想手动将标志传递给每个cmdlet.有没有人有更好的解决方案?

这个问题似乎与这个问题有关.但是,他们并没有谈论跨模块问题.

示例脚本:

#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
Run Code Online (Sandbox Code Playgroud)

模块:

#whatiftest_module.psm1
 function InnerModule …
Run Code Online (Sandbox Code Playgroud)

powershell import-module

7
推荐指数
1
解决办法
2264
查看次数

标签 统计

import-module ×1

powershell ×1