Как определить подпрограмму в PowerShell - PullRequest
17 голосов
/ 13 февраля 2012

В C # подпрограмма RemoveAllFilesByExtenstion может быть, например, объявлена ​​так:

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

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

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

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

Ответы [ 2 ]

30 голосов
/ 13 февраля 2012

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

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

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

RemoveAllFilesByExtenstion C:\Logs\ .log

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

Get-ChildItem $targetFolderPath -r -filter $ext | Remove-Item
2 голосов
/ 13 февраля 2012

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

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

    ... code... 
}

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

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

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

...