Как упоминалось в комментариях, 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
Для более широко используемых инструментов вы можете хотите рассмотреть возможность организации ваших функций в модулей