Могу ли я украсить расширенные функции PowerShell своими собственными атрибутами? - PullRequest
6 голосов
/ 09 июля 2009

Например:

function TestThis()
{
    [MySpecialCustomAttribute]
    [CmdletBinding()]
    Param(...)
    Process{...}

}

1 Ответ

0 голосов
/ 14 января 2011

Да, конечно, вы можете!

Любой тип, производный от Attribute, который допускает UsageType.All (или UsageType.Class), может использоваться в самой функции (т. Е. Выше Param)

Любой тип, производный от Attribute, который допускает использование UsageType.Property или UsageType.Field, может использоваться для самих параметров или переменных.

Нередко просто лениться и использовать UsageType.All (например, это делает встроенный атрибут OutputType).

Теперь вы даже можете написать их в классах PowerShell

using namespace System.Management.Automation
class ValidateFileExistsAttribute : ValidateArgumentsAttribute {
    [void] Validate([object]$arguments, [EngineIntrinsics]$engineIntrinsics) {
        if($null -eq $arguments) {
            throw [System.ArgumentNullException]::new()
        }
        if(-not (Test-Path -Path "$arguments" -Type Leaf)) {
            throw [System.IO.FileNotFoundException]::new("The specified path is not a file: '$arguments'")
        }        
    }
}

См. другие примеры на Кевин Маркетт блог.

Здесь есть более старый пример , показывающий, как это сделать в PowerShell 4 и более ранних версиях с использованием Add-Type, хотя сейчас он немного устарел, поскольку конкретный пример, который он показывает, был интегрирован в PowerShell 6. и больше не нужен ?

Есть также видео

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...