jul*_*gon 7 parameters powershell
假设我有一个带有多个函数的脚本,它们采用完全相同的参数,位于相同的位置,并且具有相同的类型和约束,如下所示:
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 ...
Run Code Online (Sandbox Code Playgroud)
我想param与所有函数共享块以避免潜在的问题(它们需要对所有函数都相同)并避免冗余.
PowerShell中是否有一种方法可以在param同一个脚本中跨多个函数共享块?如果没有,有什么替代品吗?
如果可以的话,我建议您采用“构建 powershell 模块的 C# 项目”方法。根据您的情况,有多种好处,其中包括:
首先,我找到了这篇文章。基本上,它表示将对System.Management.Automation.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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,要使用此模块,请打开 powershell 提示符,导航到构建 dll 的位置并使用 Import-Module cmdlet。
然后,对于您的具体问题(如何使用不同的 cmdlet 重用参数块?),您可以拥有一个定义参数的基本 cmdlet,并且您希望编写的所有 cmdlet 都可以从基类继承它。
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |