Здравствуйте,
есть функция, которая пишет текст в лог файл и выводит в окно powershell:
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
}
}
}
Есть функция, которая возвращает значение:
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"
}
}
Суть вопроса такова: мне нужно передать поток verbose в функцию Write-Log через pipeline и получить результат функции в переменную одновременно. Такой код все пишет в лог файл, даже output поток, а переменная получается пустой
$a = B -message "World" -Verbose 4>&1 | Write-Log -LogFilePath "D:\test.log"
Подскажите, пожалуйста, как правильно организовать этот процесс?