Как определить подпрограмму в PowerShell

В С# a RemoveAllFilesByExtenstion подпрограмма может быть, например, расширена следующим образом:

void RemoveAllFilesByExtenstion(string targetFolderPath, string ext)
{
...
}

и используется как:

RemoveAllFilesByExtenstion("C:\Logs\", ".log");

Как я могу defne и вызвать подпрограмму с той же сигнатурой из файла PowerShell script (ps1)?

Ответы

Ответ 1

Довольно просто преобразовать это в PowerShell:

function RemoveAllFilesByExtenstion([string]$targetFolderPath, [string]$ext)
{
...
}

Но вызов должен использовать разделенные пространством аргументы, но не требует кавычек, если в строке не указан специальный символ PowerShell:

RemoveAllFilesByExtenstion C:\Logs\ .log

OTOH, если функция указывает на то, что вы хотите сделать, это легко сделать в PowerShell:

Get-ChildItem $targetFolderPath -r -filter $ext | Remove-Item

Ответ 2

В PowerShell нет подпрограмм, вам нужна функция:

function RemoveAllFilesByExtenstion    
{
   param(
     [string]$TargetFolderPath,
     [string]$ext
   )  

    ... code... 
}

Чтобы вызвать его:

RemoveAllFilesByExtenstion -TargetFolderPath C:\Logs -Ext *.log

Если вы не используете функцию для возврата какого-либо значения, убедитесь, что вы захватили любые результаты, возвращаемые командами внутри функции.

Ответ 3

Семантика всем. Давайте назовем это Whirlygig! или Doom-a-flotch! кусок кода вызывает базовый ввод и базовый вывод