Я могу написать на javascript следующий код:
function sum(num1, num2) {
return num1 + num2;
}
а затем получить значение
var someNum = sum(2,5);
Я хотел бы сделать то же самое в Powershell, но я прочитал следующее руководство:
PowerShell также знает ключевое слово return; однако это следует другой логике. Обычно цель возврата - завершить выполнение раздела кода и вернуть управление родительскому блоку.
Если вы добавите параметр в оператор return, значение действительно будет возвращено вызывающей подпрограмме. Однако это также относится ко всем остальным операторам с выходными данными. Это означает, что любой вывод, произведенный в функции, будет сохранен в переменной вместе с возвращаемым параметром.
Я хочу сделать это ради чистых функций. Однако, похоже, делает
var someNum = sum(2,5);
полностью избыточен, когда я могу просто вызвать функцию, указанную выше, определить someNum
внутри нее, и она будет доступна в глобальной области.
Я что-то упустил или можно написать в Powershell чистые функции, которые не возвращают все внутри функции?
Немного косвенно, но вот мой реальный код:
function GetPreviousKeyMD5Hashes() {
$query = "SELECT Name, MD5, executed FROM [AMagicDb].[dbo].cr_Scripts";
$command = New-Object System.Data.SQLClient.SQLCommand;
$command.Connection = $connection;
$command.CommandText = $query;
try {
$reader = $command.ExecuteReader();
while ($reader.Read()) {
$key = $reader.GetString(1)
$previousScripts.Add($key) | Out-Null
}
$reader.Close();
Write-Output "$(Get-Date) Finished querying previous scripts"
}
catch {
$exceptionMessage = $_.Exception.Message;
Write-Output "$(Get-Date) Error running SQL at with exception $exceptionMessage"
}
}
а потом:
$previousScripts = New-Object Collections.Generic.HashSet[string];
GetPreviousKeyMD5Hashes;
Этот код мне совсем не понятен - запуск GetPreviousKeyMD5Hashes
действительно устанавливает $previousScripts
, но это совершенно неясно для тех, кто изменит его после меня. Моя единственная другая альтернатива (afaik) - иметь все это в строке, которая также не читается.