如何创建自定义Powershell运算符?

Sam*_*rch 4 powershell customization

是否可以在Powershell中创建自定义运算符?而且,我该怎么做?我搜索过谷歌,但没有任何事情发生.

我指的是一个特定的中缀运算符:

$ ExampleList -contains "元素"

我创建了cmdlet(使用Powershell和C#),模块等,所以我只需要广泛的笔画.

Kei*_*ill 9

您可以创建前缀运算符,但不能创建in-fix或post-fix运算符,例如:

Set-Alias ?: Invoke-Ternary
function Invoke-Ternary {
param(
    [Parameter(Mandatory, Position=0)]
    [scriptblock]
    $Condition,

    [Parameter(Mandatory, Position=1)]
    [scriptblock]
    $TrueBlock,

    [Parameter(Mandatory, Position=2)]
    [scriptblock]
    $FalseBlock,

    [Parameter(ValueFromPipeline, ParameterSetName='InputObject')]
    [psobject]
    $InputObject
)

Process {
    if ($pscmdlet.ParameterSetName -eq 'InputObject') {
        Foreach-Object $Condition -input $InputObject | Foreach {
            if ($_) {
                Foreach-Object $TrueBlock -InputObject $InputObject
            }
            else {
                Foreach-Object $FalseBlock -InputObject $InputObject
            }
        }
    }
    elseif (&$Condition) {
        &$TrueBlock
    }
    else {
        &$FalseBlock
    }
}
Run Code Online (Sandbox Code Playgroud)

使用如下:

$toolPath = ?: {[IntPtr]::Size -eq 4} {"$env:ProgramFiles(x86)\Tools"} {"$env:ProgramFiles\Tools"}}
Run Code Online (Sandbox Code Playgroud)


Jon*_*jan 1

您可以创建一个 cmdlet 并将列表通过管道传输到其中。要评估列表,请务必使用该End函数而不是ProcessProcess会自动迭代集合,这是您不想要的。

你的脚本看起来像这样:

$ExampleList | Test-Contains "element"
Run Code Online (Sandbox Code Playgroud)