У меня есть две функции: Write-Log и B . Функция B может выводить сообщения в Verbose Stream и возвращать некоторое значение. Мне нужно получить возвращаемое значение из функции B в некоторую переменную и передать подробный поток в функцию Write-Log по трубопроводу одновременно.
Я пытался сделать это по строке:
$a = B -message "World" -Verbose 4>&1 | Write-Log -LogFilePath "D:\test.log"
но выводит все сообщения в файл журнала, включая возвращаемое значение и переменную $ a пусто
код функции запись-запись :
function Write-Log {
[cmdletbinding()]
param(
[Parameter (ValueFromPipeline=$True)]
[string]$Text,
[string]$LogFilePath,
[switch]$Silent,
[ConsoleColor]$ForegroundColor
)
process {
[string]$MessageWithDate = "$((Get-Date).ToString()) $Text"
if (-not($Silent)) {
if($ForegroundColor -eq $null) {
Write-Host $Text
} else {
Write-Host $Text -ForegroundColor $ForegroundColor
}
}
try {
if(-not (Test-Path($($LogFilePath)))) {
New-Item -Path $($LogFilePath) -ItemType "file" | Out-Null
}
$MessageWithDate | Out-File -filepath $($LogFilePath) -Append -NoClobber
} catch {
Write-Host "Error has occurred while writing log note to file $($LogFilePath): $($_ | Select-Object -Property *)" -foregroundcolor red
}
}
}
Код функции B :
function B{
[cmdletbinding()]
param(
$message
)
begin {
Write-Verbose "[Function B] - Start"
Write-Verbose "Initial parameters:"
($PSBoundParameters.GetEnumerator() | ForEach-Object { Write-Verbose "- $($_.Key) = '$($_.Value)'" })
}
process {
return ("Hello, " + $message)
}
end {
Write-Verbose "[Function B] - End"
}
}
Мне нужно иметь «Hello, World» в переменной $ a и что-то вроде этого в файле журнала:
3/30/2019 12:37:35 PM [Function B] - Start
3/30/2019 12:37:35 PM Initial parameters:
3/30/2019 12:37:35 PM - message = 'World'
3/30/2019 12:37:35 PM - Verbose = 'True'
3/30/2019 12:37:35 PM [Function B] - End
Не могли бы вы помочь мне с проблемой?