Это один из немногих случаев, когда глобальные переменные полезны, потому что они могут сохраняться в течение всего сеанса. В этом примере я использую их, чтобы установить уникальное имя файла (в данном случае сегодняшнюю дату), чтобы войти в систему:
function Write-Host($object)
{
if($global:LogFile -eq $null)
{
$global:LogFile = ".\LOG-$(Get-Date -Format 'yyyy-MM-dd').txt"
}
$object | tee $global:LogFile -Append
}
--- Редактировать: ---
Из комментариев, если вы хотите иметь новый файл в начале сеанса и добавлять его во время сеанса, мы все равно можем использовать глобальную переменную для определения начала сеанса, но мы просто используем проверку, чтобы удалить файл в начале, и оставить приложение к тройнику:
function Write-Host($object)
{
if($global:LogFile -eq $null)
{
$global:LogFile = ".\LOG.txt"
Remove-Item $global:LogFile -ErrorAction SilentlyContinue
}
$object | tee $global:LogFile -Append
}
--- Редактировать 2: ---
Со второго комментария:
Remove-Item
- другое животное, потому что по умолчанию оно не выводится. Действительно, единственный способ получить любой вывод - это добавить параметр -Verbose
. Но Tee-Object
не захватывает подробный поток. Чтобы обойти это, мы должны использовать два трюка. Сначала мы указываем параметр -Verbose
(чтобы получить вывод) с перенаправлением ( about_Redirection ), чтобы перенаправить подробный поток (4) в стандартный поток Success (1) / Information. Это позволит Tee-Object
собирать информацию из командлета Remove-Item
:
Remove-Item test.txt -Verbose 4>&1 | Tee-Object out.txt