【问题标题】:Conditionally execute custom powershell function/cmdlet after a built-in cmdlet is executed在执行内置 cmdlet 后有条件地执行自定义 powershell 函数/cmdlet
【发布时间】:2018-03-22 23:09:12
【问题描述】:

每次用户执行特定的内置 cmdlet 时,如何设置要运行的自定义函数(当导入该函数的模块时)?

例如如果用户加载了包含自定义函数的自定义模块并运行“Get-Process”cmdlet,则在将输出返回到控制台后,会自动调用并执行“Run-CustomFunction”。

-----------编辑-----------

这是一个简单的函数,它根据用户输入读取 .csv,并使用正则表达式构建 cmd 行,并使用流行软件供应商提供的模块的参数执行函数。几乎像啪啪啪一样。它有一个姊妹功能,可以帮助用户在控制台的标题栏中跟踪使用情况。我要解决的是,当用户键入 cmd 行时,控制台的标题栏不会更新。 .csv 经常被操纵,因此有时需要的值不可用,用户必须手动键入 cmdlet 和参数值。当手动键入时,我仍然希望更新标题栏。

【问题讨论】:

    标签: powershell automation powercli


    【解决方案1】:

    这是一种可能性,虽然我不确定我是否真的会推荐它:

    在您的自定义模块中,重新定义您要修改的 cmdlet,以便它调用原始 cmdlet,然后执行您想要的任何额外操作。例如,下面是我们如何让 Get-Service 在每次调用 Get-Process 后运行:

    # Define a function called Get-Process
    function Get-Process
    {
        # Call original Get-Process cmdlet using 'modulename\cmdletname' syntax
        Microsoft.PowerShell.Management\Get-Process | Out-Host
    
        # Call get service (could be your own function instead)
        Get-Service
    }
    

    所以,原来 Get-Process 的输出到控制台,Get-Service 的结果从函数返回(并且默认也到控制台。有很多原因这是一个非常糟糕的主意(例如,它会破坏任何期望来自 Get-Process 的默认行为的东西),但如果你愿意,你可以尝试一下。

    【讨论】:

    • 有趣的拍摄。我喜欢这个想法,我很感激反馈。您是否认为具有全局范围的别名调用 get-process 函数但也运行自定义函数可能会起作用?
    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多