powershell - проблемы с объявлением класса / функции - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в powershell, поэтому я не уверен, почему я получаю следующую ошибку:

отсутствует закрытие '}' в блоке операторов или определении типа

Но все выглядит согласованно, исходя из моих java знаний.

У меня структура типа class { method1{} method2{} } происходит следующим образом:

case use

class DoSomething1
{

    <#
         .SYNOPSIS whatever
         .PARAMETER somevalue1
         .PARAMETER somevalue2
         ... etc
    #>

    function DoSomething1
    {
        [cmdletbinding()]
        param
        (
            [parameter(Mandatory = $true, HelpMessage = "help yourself")]
             $somevalue3
        )
     # will add code to constructor later
    }
}

Я не уверен, в чем проблема, потому что, когда я пишу свой метод как:

альтернатива

class DoSomething1
{
   DoSomething1()
   {
      # whatever
   }
}

Я не уверен, есть ли преимущество одного по сравнению с другим, или если я использую функцию ключевого слова вне контекста, но я хотел применить концепцию cmdletbindings и получить справочную информацию, используя <# .SYNOPSIS details #> в перед функциональной командой.

Кто-нибудь знает, что я делаю неправильно?

1 Ответ

0 голосов
/ 29 мая 2020

Как упоминалось в комментариях, PowerShell не совсем похож на Java или C#, и классы являются своего рода «гражданами второго сорта» в отношении функций языка PowerShell.

Вместо этого в PowerShell мы можем реализовать поведение, подобное командлету, с помощью чего-то, называемого расширенными функциями - как тот, который у вас уже есть:

function DoSomething1
{
    [cmdletbinding()]
    param
    (
        [parameter(Mandatory = $true, HelpMessage = "help yourself")]
         $somevalue3
    )

    # do something with $somevalue3
}

сценарии PowerShell оцениваются построчно, поэтому, если вы поместите один из этих определения функций в сценарии, любой последующий вызов DoSomething1 вызовет эту функцию.

В зависимости от размера и объема того, что вы пытаетесь автоматизировать, вы можете столкнуться с большим количеством небольших автономных функций, подобных этой. Чтобы лучше организовать свой код в более крупных проектах, вы можете разделить определения функций на отдельные файлы, а затем использовать оператор вызова . для их выполнения, что заставит функцию (и) «сохраняться» в текущей области:

Get-Something.ps1:

function Get-Something
{
  [CmdletBinding()]
  param(<# ... #>)
  # ...
}

Export-Somewhere.ps1:

function Export-Somewhere 
{
  [CmdletBinding()]
  param(<# ... #>)
  # ...
}

script.ps1:

# Import functions from other the script files
. .\Get-Something.ps1
. .\Export-Somewhere.ps1

# Now we can use the functions in here
Get-Something |Export-Somewhere 

Для более широко используемых инструментов вы можете хотите рассмотреть возможность организации ваших функций в модулей

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