Добавить функцию в сценарий PowerShell - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь включить эту функцию в свой скрипт, но она показывает мне ошибки, если я добавлю любой другой код перед этой функцией, как показано ниже. Я заключил параметр в {}, и ошибка больше не отображается, но выводит неверно, поскольку параметры больше не определяются. У меня есть другой код, который нужно запустить до выполнения этой части скрипта. Вы можете увидеть добавление любого другого кода до того, как эта функция вызовет ошибки.

Итак, я не знаю, как включить эту часть скрипта в другой мой код и заставить его работать. Любая помощь?

enter image description here

Ответы [ 2 ]

6 голосов
/ 28 мая 2020

Поместите скрипт в функцию. Вы просто окружаете код функцией.

Function Get-Traceroute{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$True,ValueFromPipeline=$True)]
        [String]$Target,

        [Parameter(ValueFromPipeline)]
        [Alias("c")]
        [ValidateRange(5,100)]
        [int]$PingCycles = 10, #Default to 10 pings per hop; minimum of 5, maximum of 100

        [Parameter(ValueFromPipeline)]
        [Alias("b")]
        [ValidateRange(32,1000)]
        [int]$BufLen = 32, #Default to 32 bytes of data in the ICMP packet, maximum of 1000 bytes

        [Parameter(ValueFromPipeline)]
        [Alias("s")]
        [IPAddress]$DNSServer = $Null,

        [Parameter(ValueFromPipeline)]
        [Alias("f")]
        [String]$Filename = "Traceroute_$Target"

    )
    Function script:Set-Variables {
    ...more code here...
}

Тогда вы можете просто вызвать функцию Get-TraceRoute -Target 8.8.8.8

5 голосов
/ 28 мая 2020

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

Итак, объявление вашего параметра ([CmdletBinding] до конца блока param()) должно быть вверху скрипта. Затем вы можете полностью включить эту другую функцию. Например, это будет выглядеть так ...

 [Parameter(ValueFromPipeline)]
    [Alias("s")]
    [IPAddress]$DNSServer = $null,

    [Parameter(ValueFromPipeline)]
    [Alias("f")]
    [String]$Filename = "Traceroute_$Target"

    )#end of your original param block

Function Get-TraceRoute{
    param(
    [Parameter(Mandatory=$True,ValueFromPipeline=$True)]
    [String]$Target,
#. omitting 230 lines.#

$PerTraceArr | Format-Table -Autosize
}#end of Get-TraceRoute

Затем вы должны завершить сценарий следующим образом:

}#end of Get-TraceRoute

Get-TraceRoute -Target $ip #or whichever params you want to pass in to your `.ps1` file.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...