Это связано с поведением переменной области видимости в PowerShell.
По умолчанию все переменные в области действия вызывающего абонента видимы внутри функции. Итак, мы можем сделать:
function Print-X
{
Write-Host $X
}
$X = 123
Print-X # prints 123
$X = 456
Print-X # prints 456
Пока все хорошо. Но когда мы начинаем запись в переменные вне самой функции, PowerShell прозрачно создает новую переменную внутри собственной области действия функции:
function Print-X2
{
Write-Host $X # will resolve the value of `$X` from outside the function
$X = 999 # This creates a new `$X`, different from the one outside
Write-Host $X # will resolve the value of the new `$X` that new exists inside the function
}
$X = 123
Print-X2 # Prints 123, and 999
Write-Host $X # But the value of `$X` outside is still 123, unchanged
Итак, что делать? Вы могли бы использовать модификатор области видимости для записи в переменную вне функции, но реальное решение здесь состоит в том, чтобы вернуть значение из функции вместо этого:
function Write-Log([string]$logtext, [int]$level=0, [switch]$PassThru = $true)
{
if($level -eq 0)
{
$logtext = "[INFO] " + $logtext
$text = "["+$logdate+"] - " + $logtext
Write-Host $text
if($PassThru){
return $text
}
}
}
$logLine = Write-Log "Some log message" -PassThru
Send-MailMessage -Subject $logLine ...