Validation 请参阅Powershell中的其他参数';s验证脚本

Validation 请参阅Powershell中的其他参数';s验证脚本,validation,powershell,Validation,Powershell,我最初把我现在想简化的问题复杂化了: 更重要的是,我是否有可能引用ValidateScript部分中的参数,而不是正在验证的参数 以下是我想做的: 这是powershell文档中关于ValidateScript参数的说明 使用ValidateScript属性时,参数值 正在验证的被映射到$变量。你可以使用$_ 变量以引用脚本中的参数值 你让我好奇,我做了一些测试。似乎您可以在ValidateScriptscript块中访问其他参数的值,但前提是它们已经绑定 也就是说,这完全取决于传递参数的顺序

我最初把我现在想简化的问题复杂化了:

更重要的是,我是否有可能引用ValidateScript部分中的参数,而不是正在验证的参数

以下是我想做的:


这是powershell文档中关于ValidateScript参数的说明

使用ValidateScript属性时,参数值 正在验证的被映射到$变量。你可以使用$_ 变量以引用脚本中的参数值


你让我好奇,我做了一些测试。似乎您可以在
ValidateScript
script块中访问其他参数的值,但前提是它们已经绑定

也就是说,这完全取决于传递参数的顺序-应在
ValidateScript
脚本块中要访问的所有其他参数之后指定带有
ValidateScript
的参数

例外情况是:

  • Switch
    按属性名绑定时的参数-在我的测试中,它们总是返回
    false
  • 如果带有
    ValidateScript
    的参数使用的是
    valuefrompippeline
    ,则它似乎总是最后绑定,因此可以访问所有其他参数
另外,这绝不是一个竞争性的研究,所以你可以自由地进行实验

以下是我的测试脚本:

function Test-ParamAccess
{
    [CmdletBinding()]
    Param
    (
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [switch]$Alfa,

        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [ValidateScript({
            'Output', [ordered]@{
                Alfa = $Alfa
                Bravo = $_
                Charlie = $Charlie
            } | Format-Table -Autosize | Out-String | Write-Warning
            $true
        })]
        [string]$Bravo,

        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string]$Charlie
    )
}

$Cmdline = @(
     "-Alfa -Bravo 'BRAVO' -Charlie 'CHARLIE'",
     "-Alfa -Charlie 'CHARLIE' -Bravo 'BRAVO'",
     "-Bravo 'BRAVO' -Alfa -Charlie 'CHARLIE'",
     "-Bravo 'BRAVO' -Charlie 'CHARLIE' -Alfa",
     "-Charlie 'CHARLIE' -Alfa -Bravo 'BRAVO'",
     "-Charlie 'CHARLIE' -Bravo 'BRAVO' -Alfa"
)

$Hashtable = @(
      'Alfa = $true ; Bravo = "BRAVO" ; Charlie = "CHARLIE" ;'
      'Alfa = $true ; Charlie = "CHARLIE" ; Bravo = "BRAVO" ;'
      'Bravo = "BRAVO" ; Alfa = $true ; Charlie = "CHARLIE" ;'
      'Bravo = "BRAVO" ; Charlie = "CHARLIE" ; Alfa = $true ;'
      'Charlie = "CHARLIE" ; Alfa = $true ; Bravo = "BRAVO" ;'
      'Charlie = "CHARLIE" ; Bravo = "BRAVO" ; Alfa = $true ;'
) | ForEach-Object {
  Invoke-Expression "[ordered]@{$_}"
}

$Pipeline = @(
    "-Alfa -Charlie 'CHARLIE'",
    "-Charlie 'CHARLIE' -Alfa"
)

$Separator =  '=' * 80

$Separator, 'Arguments via commandline:', $Separator | Write-Host
$Cmdline | ForEach-Object {
    Write-Host "Input: $_"
    Invoke-Expression "Test-ParamAccess $_"
}

$Separator, 'Arguments via splatting:', $Separator | Write-Host
$Hashtable | ForEach-Object {
    'Input:', ($_ | Out-String) | Write-Host
    Test-ParamAccess @_
}

$Separator, 'Arguments via pipeline by property name:', $Separator | Write-Host
$Hashtable | ForEach-Object {
    'Input:', ($_ | Out-String) | Write-Host
    New-Object -TypeName PsCustomObject -Property $_ | Test-ParamAccess
}

$Separator, 'Arguments via pipeline by value:', $Separator | Write-Host 
$Pipeline | ForEach-Object {
    'Input:', ($_ | Out-String) | Write-Host
    Invoke-Expression "'BRAVO' | Test-ParamAccess $_"
}
结果:

================================================================================
Arguments via commandline:
================================================================================
Input: -Alfa -Bravo 'BRAVO' -Charlie 'CHARLIE'
WARNING: Output


Name    Value
----    -----
Alfa    True 
Bravo   BRAVO
Charlie      


Input: -Alfa -Charlie 'CHARLIE' -Bravo 'BRAVO'
WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input: -Bravo 'BRAVO' -Alfa -Charlie 'CHARLIE'
WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input: -Bravo 'BRAVO' -Charlie 'CHARLIE' -Alfa
WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input: -Charlie 'CHARLIE' -Alfa -Bravo 'BRAVO'
WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input: -Charlie 'CHARLIE' -Bravo 'BRAVO' -Alfa
WARNING: Output


Name    Value  
----    -----  
Alfa           
Bravo   BRAVO  
Charlie CHARLIE


================================================================================
Arguments via splatting:
================================================================================
Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value
----    -----
Alfa    True 
Bravo   BRAVO
Charlie      


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value  
----    -----  
Alfa           
Bravo   BRAVO  
Charlie CHARLIE


================================================================================
Arguments via pipeline by property name:
================================================================================
Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


================================================================================
Arguments via pipeline by value:
================================================================================
Input:
-Alfa -Charlie 'CHARLIE'


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input:
-Charlie 'CHARLIE' -Alfa


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE

为什么要切换?只需使用实际路径参数作为指示符。如果需要确保至少设置了其中一个,最简单的方法是在函数体内部检查。否则你必须求助于动态参数。我同意安斯加的观点。只需测试文件路径是否存在,并对此做出反应。是的,这听起来是个好主意。但是,在其他情况下,我可能希望验证一个参数,该参数涉及查看另一个参数的值。+1了解了一些新的东西。。。我知道其他Validatexx属性,但不知道
ValidateScript
================================================================================
Arguments via commandline:
================================================================================
Input: -Alfa -Bravo 'BRAVO' -Charlie 'CHARLIE'
WARNING: Output


Name    Value
----    -----
Alfa    True 
Bravo   BRAVO
Charlie      


Input: -Alfa -Charlie 'CHARLIE' -Bravo 'BRAVO'
WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input: -Bravo 'BRAVO' -Alfa -Charlie 'CHARLIE'
WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input: -Bravo 'BRAVO' -Charlie 'CHARLIE' -Alfa
WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input: -Charlie 'CHARLIE' -Alfa -Bravo 'BRAVO'
WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input: -Charlie 'CHARLIE' -Bravo 'BRAVO' -Alfa
WARNING: Output


Name    Value  
----    -----  
Alfa           
Bravo   BRAVO  
Charlie CHARLIE


================================================================================
Arguments via splatting:
================================================================================
Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value
----    -----
Alfa    True 
Bravo   BRAVO
Charlie      


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value
----    -----
Alfa         
Bravo   BRAVO
Charlie      


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value  
----    -----  
Alfa           
Bravo   BRAVO  
Charlie CHARLIE


================================================================================
Arguments via pipeline by property name:
================================================================================
Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 
Charlie                        CHARLIE                                                                                                                                              


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Bravo                          BRAVO                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Alfa                           True                                                                                                                                                 
Bravo                          BRAVO                                                                                                                                                


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


Input:


Name                           Value                                                                                                                                                
----                           -----                                                                                                                                                
Charlie                        CHARLIE                                                                                                                                              
Bravo                          BRAVO                                                                                                                                                
Alfa                           True                                                                                                                                                 


WARNING: Output


Name    Value  
----    -----  
Alfa    False  
Bravo   BRAVO  
Charlie CHARLIE


================================================================================
Arguments via pipeline by value:
================================================================================
Input:
-Alfa -Charlie 'CHARLIE'


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE


Input:
-Charlie 'CHARLIE' -Alfa


WARNING: Output


Name    Value  
----    -----  
Alfa    True   
Bravo   BRAVO  
Charlie CHARLIE