是否可以在多个函数中重用“param”块?

2024-04-18

假设我有一个包含多个函数的脚本,这些函数采用完全相同的参数、相同的位置、相同的类型和约束,如下所示:

function Verb1-MyValue {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $true)][String]$Param1,
        [parameter(Mandatory = $true)][String]$Param2,
        [ValidateSet("Value1","Value2")][String]$Param3 = "Value1"
    )
    # code ...
}

function Verb2-MyValue {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $true)][String]$Param1,
        [parameter(Mandatory = $true)][String]$Param2,
        [ValidateSet("Value1","Value2")][String]$Param3 = "Value1"
    )
    # code ...
}

# and so on ...

我想分享param阻止所有功能以避免潜在问题(它们need对所有这些都相同)并避免冗余。

PowerShell 有没有办法共享param阻止同一脚本中的多个函数?如果没有,有其他选择吗?


如果可以的话,我建议您采用“构建 powershell 模块的 C# 项目”方法。根据您的情况,有多种好处,其中包括:

  1. 编译时安全。我知道一些开发人员会更喜欢 编译/强类型语言,因为增加了安全性
  2. 更容易编写自动化测试。这可能是有争议的,但在我看来 意见,拥有像 nUnit 和其他测试框架这样的库 是一个巨大的优势
  3. 语言熟悉程度。我遇到过很多 熟悉 c# 但不熟悉 powershell 的开发人员,因此他们 斗争。

首先,我发现本文 http://www.powershellmagazine.com/2014/03/18/writing-a-powershell-module-in-c-part-1-the-basics/。基本上,它说添加一个引用系统管理自动化.dll添加到您的项目,然后一个非常基本的 cmdlet 将如下所示:

using System;
using System.Collection.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management.Automation;

namespace MyModule
{
    [Cmdlet(VerbsCommon.Get, "Saluation")]
    public class GetSaluation : PSCmdlet
    {
        private string[] nameCollection;

        [Parameter(
            Mandatory = true,
            ValueFromPipelineByPropertyName = true,
            ValueFromPipelin = true,
            Position = 0,
            HelpMessage = "Name to get salutation for."
        )]
        [Alias("Person", "FirstName")]
        public string[] Name
        {
            get { return nameCollection;}
            set { nameCollection = value;}
        }

        protected override void BeginProcessing()
        {
            base.BeginProcessing();
        }

        protected override void ProcessRecord()
        {
            foreach (string name in nameCollection)
            {
                WriteVerbose("Creating salutation for " + name);
                string salutation = "Hello, " + name;
                WriteObject(salutation);
            }
        }

        protected override void EndProcessing()
        {
            base.EndProcessing();
        }

    }

然后,要使用此模块,请打开 powershell 提示符,导航到构建 dll 的位置并使用 Import-Module cmdlet。

然后针对你的具体问题(如何使用不同的 cmdlet 重用参数块?)您可以拥有一个定义参数的基本 cmdlet,并且您希望编写的所有 cmdlet 都可以从基类继承它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在多个函数中重用“param”块? 的相关文章

  • 如何扩展和重写集合类中的 Add

    背景 我在 PowerShell 中有一个具有 4 个属性的数据对象 其中 3 个是字符串 第 4 个是哈希表 我想安排一个新类型 将其定义为该数据对象的集合 在这个集合类中 我希望强制执行一种特定的格式 这将使我在模块中其他地方的代码更加
  • 并行启动服务

    我有一个脚本可以检查不同服务器上的某些服务是否已启动 如果没有启动 该脚本应该启动该服务 问题是 它不会并行启动服务 而是等待每个服务启动 Code server list Get Content path D Path list of s
  • 将 Metro 应用程序固定到任务栏 Windows 10 Powershell

    以下代码将固定 Metro 应用程序以在给定 AUMID 的情况下启动 如果你改变 match Pin To Start 不幸的是 将匹配更改为 固定到任务栏 不起作用 这里发生了什么 function Pin Taskbar param
  • 在 powershell 脚本中以不同用户身份本地运行代码块

    这是非常简单的事情 但我就是无法让任何东西发挥作用 我想在特定用户下的 powershell 脚本中运行块代码 关键字是locally我正在使用 powershell 2 0 Invoke Command 似乎需要远程主机 我运行以下命令
  • Powershell 添加的字符串类型的 ParameterizedProperty Chars 属性是什么?

    请注意 C gt Get Member MemberType eq ParameterizedProperty TypeName System String Name MemberType Definition Chars Paramete
  • 根据传递的参数覆盖 Javascript 函数

    是否可以根据传递给函数的参数数量来重写函数 例如 function abc name document write My name is name function abc name friend document write My nam
  • Powershell XMLDocument保存为无BOM的UTF-8

    我构建了一个 System Xml XmlDocument 类型的 XML 对象 scheme gettype IsPublic IsSerial Name BaseType True False XmlDocument System Xm
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • 将 < 或 > 运算符作为参数传递给函数?

    我的函数里面有一个if 像这样的声明 if passedValue lt staticValue 但我需要能够传递一个参数来指示 if 表达式是像上面那样还是 if passedValue gt staticValue 但我真的无法通过 l
  • [Regex]::Replace() 和 -replace 有什么区别?

    我明白了之间的区别 Replace and replace 但是什么是 replace and Regex Replace 我测试了以下两个代码 但对我来说结果完全相同 我还提到了 PowerShell Cookbook O reilly
  • 使用 UTF-8 编码的 Powershell 字符串变量

    我检查了许多与此相关的问题 但找不到解决我的问题的东西 基本上 我想将 UTF 8 编码的字符串存储在变量中 然后使用该字符串作为文件名 例如 我正在尝试下载 YouTube 视频 如果我们打印视频标题 则会显示非英文字符 ytd这是you
  • 如何从 C# 运行 PowerShell 脚本

    我正在尝试使用 C 运行 PowerShell 脚本 但没有成功 这是我的功能 private void ExecutePowerShellCommand string scriptfile RunspaceConfiguration ru
  • 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序

    我是一名学生开发人员 我已经为我现在工作的公司构建了几个安装程序 所以我对WIX还是比较熟悉的 我们最近决定拥有一个构建服务器来自动构建我们的解决方案 它构建调试和发布以及混淆 和非混淆 项目 你真的不需要理解这些 您需要了解的是 我有相同
  • 将 Powershell 输出转换为 Markdown 文件

    我有以下代码 xmlFile C Users kraer Desktop bom xml xml xml Get Content xmlFile xml bom components component ForEach Object fin
  • 在 PowerShell 中显示 Unicode 表情符号

    我想在 PowerShell 中显示像 U 1F4A9 这样的 Unicode 表情符号 我知道这仅在 ISE 控制台内有效 但我不知道如何操作 到目前为止我尝试过的 CharBytes System Text Encoding Unico
  • 启动过程中的写入进度 - 等待

    我正在尝试创建安装脚本并在安装过程中显示进度条 localfolder Get Location path start process FilePath localfolder Installer exe ArgumentList sile
  • Chocolatey 无法使用 PowerShell cmdlet

    所以 我开始使用巧克力了 但是 我注意到 cmdlet 不起作用 例如 如果尝试使用 choco 命令执行任何操作 前任 choco install vlc 它工作得很好 但是 如果我尝试使用旧的 cmdlet 前任 Install Pac
  • Convertfrom-string 删除前导零

    我在使用 Convertfrom String cmdlet 时遇到问题 value something 009 value ConvertFrom String Delimiter Output P1 P2 something 9 我想要
  • Powershell 在导入 csv 时出现 Set-ACL 问题

    我使用一个脚本将 ACL 从一个系统导入到 csv 中 并使用另一个脚本读取 csv 创建文件夹结构并将权限应用到新系统 由于安全限制 系统不可能相互连接 因此不能选择 robocopy 正在创建新的文件夹结构 但 ACL 未应用 并且出现
  • 获取进程和进程所有者

    我正在尝试对一个脚本进行排序 该脚本将检索进程的所有实例以及进程各自的所有者 我有一个脚本来获取进程名称和开始时间 get process name notepad select object starttime name 我有一个脚本来获

随机推荐

  • 如何非递归地获取二叉树中叶节点的数量?

    我有一个练习问题被难住了 在不使用递归的情况下获取二叉树中叶节点的数量 我已经四处寻找一些想法 我已经看到了一些想法 例如将节点传递到堆栈 但我不知道当有多个分支时如何做到这一点 任何人都可以提供指针吗 NumberOfLeafNodes
  • 为每个文件运行气流 DAG

    所以我在airflow中有一个非常好的DAG 它基本上在二进制文件上运行几个分析步骤 作为airflow插件实现 DAG 由 ftp 传感器触发 该传感器仅检查 ftp 服务器上是否有新文件 然后启动整个工作流程 所以目前的工作流程是这样的
  • 将数据从浏览器发送到服务器并返回

    我是 C 开发人员 很长一段时间以来我没有真正跟进任何与 Web 相关的开发 我有一个想要实施的项目 实际上是为了赶上这些技术 我的项目是这样的 在浏览器中显示一些内容 例如使用画布和 WebGL 的 3D 场景的内容 在页面上有一个按钮
  • 从出生日期提取的年龄总是出现不一致的情况

    我使用以下代码将用户提供的出生日期转换为当前日期的等效年份 输出在年份中的偏差总是不一致 而在天和月中的偏差则非常大 NSDateFormatter tempFormatter NSDateFormatter alloc init temp
  • 为静态库编译 SWIG Python 包装器?

    这是一个菜鸟问题 我正在尝试学习如何使用 SWIG 为 C 库制作 python 接口 该库是专有的第三方库 它以头文件 foo h 和静态存档 libfoo a 的形式出现在我面前 为了简化问题 我编造了一个我认为具有相同病理学的例子 无
  • pdfkit-警告:阻止访问文件

    在 HTML 文件中使用本地图像时 使用 pdfkit 库将 HTML 转换为 pdf 时出现错误 阻止对文件的访问 如何在 HTML 文件中使用本地图像 我遇到了同样的问题 我通过向 pdfkit from file 添加 enable
  • 深层复制 System.Windows.Forms.WebBrowser 对象/恢复状态

    本质上 我想要做的是复制一个 WebBrowser 对象 以便我可以执行相当于 在新选项卡中打开 或 在新窗口中打开 操作 从而维护任何已发布的数据 我不仅仅想导航到与原始 WebBrowser 对象中相同的 URL 而是想重复 HttpW
  • 许多库上的 APK META-INF 中复制的重复文件?

    我在尝试构建 APK 时收到此错误 错误 任务 app transformResourcesWithMergeJavaResForDebug 执行失败 com android build api transform TransformExc
  • 为什么我应该使用&而不是&?

    我为什么要使用 amp 代替 为我的网站编写 HTML 时 在哪里可以找到我应该编码的其他符号的列表 酒吧 也是吧 如果我将符号按原样粘贴到 html 中 可能会遇到什么问题 事情是 我有一些附属链接 我担心 如果我在某些情况下用 编写它们
  • PTVS 和 numpy System.Int64 转换中的 numpy 64 位支持

    我正在尝试使用 IronPython 和 numpy 编写一些调用 NET 程序集的代码 版本信息 numpy 2 0 0 1 scipy 1 0 0 2 铁Python 2 7 1 我根据此处给出的说明安装了 scipy 和 numpy
  • UIViewContentModeScaleAspectFill 不裁剪

    我正在尝试使用以下命令以固定尺寸 100x100 绘制一些缩略图UIImageView 我将图像视图的帧大小设置为 100x100 并将contentMode to UIViewContentModeScaleAspectFill 我的理解
  • ruby irb 在 Windows 上使用 gitbash shell - 无法使用箭头键修改命令输入?

    当我执行 Rails Console 时 我的 git bash shell 允许我使用向上箭头来调用命令 并使用向左 向右箭头来修改我输入的文本 当我跑步时irbshell 忽略退格键和箭头键 我不确定为什么箭头键在 Rails 控制台的
  • 使用数据中的参数调用 C# 方法

    比如说 我有一个像这样的 XML 字符串
  • 加载Python lib'/tmp/_MEItueAuk/libpython3.7m.so.1.0'时出错:dlopen:/lib/x86_64-linux-gnu/libc.so.6:找不到版本“GLIBC_2.28”

    我已经安装了minidcos https minidcos readthedocs io 使用下面的命令 curl fail L https github com dcos dcos e2e releases download 2019 1
  • 如何在Android中渲染OBJ或FBX? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有几个 obj 和 fbx 格式的 3D 对象 其中包含 mtl 和纹理文件 我想知道哪个是在 An
  • 嵌套 foreach 到 Linq [重复]

    这个问题在这里已经有答案了 我是 LINQ 新手 请帮助我将这行嵌套代码转换为 LINQ foreach var rule in rules foreach var package in packages if rule KeyFrom p
  • 在 RxJava 中,如何在错误时重试/恢复,而不是完成可观察的

    我想要实现的是 监控特定变化的偏好 当检测到更改时 使用新值启动新的网络调用 变换结果 在 UI 中显示结果 我知道更改何时发生 现在我认为我需要对某个主题调用 onNext 然后这应该会触发 Rx 链 最后我可以更新 UI mViewPe
  • 不使用Setup.exe手动安装Cygwin

    在不使用预制安装实用程序时 我无法找到正确安装 Cygwin 所需的所有文件 这背后的原因是我的公司计算机阻止了 exe 的使用 并且不允许我安装它 他们说工作不需要它 但希望我执行某些任务 Cygwin 会让事情变得更简单 所以我的问题是
  • 获取插入行的行数据(Mysql、PHP、mysqli)

    当我插入一行时 我需要取回该行的 postid 自动递增 PK 我目前正在使用它来获取它 get postid to return if result db gt query SELECT postid FROM posts WHERE t
  • 是否可以在多个函数中重用“param”块?

    假设我有一个包含多个函数的脚本 这些函数采用完全相同的参数 相同的位置 相同的类型和约束 如下所示 function Verb1 MyValue CmdletBinding param parameter Mandatory true St