假设我有一个包含多个函数的脚本,这些函数采用完全相同的参数、相同的位置、相同的类型和约束,如下所示:
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# 项目”方法。根据您的情况,有多种好处,其中包括:
- 编译时安全。我知道一些开发人员会更喜欢
编译/强类型语言,因为增加了安全性
- 更容易编写自动化测试。这可能是有争议的,但在我看来
意见,拥有像 nUnit 和其他测试框架这样的库
是一个巨大的优势
- 语言熟悉程度。我遇到过很多
熟悉 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(使用前将#替换为@)