У меня есть скрипт, который включает функцию для ведения журнала. Функция записывает журнал в переменную $ msg, затем записывает сообщение на экран. Я могу перенаправить этот вывод в TXT-файл для ведения журнала.Ведение журнала Powershell из команды invoke
Мне нужно запустить сценарий на нескольких серверах с помощью команды вызова и записать вывод журнала в файл txt на компьютере, на котором запущен скрипт.
Я пытаюсь выяснить, как вывести $ msg в функцию записи журнала из PSSession и вернуть его, чтобы я мог создать файл главного журнала для всех серверов. Должен ли я создавать и заполнять пользовательский объект? Не знаете, как это сделать и получить результаты с удаленного сеанса.
Можно ли это сделать?
Вот пример кода, который я использую и то, что выходной файл журнала должен выглядеть:
$servers = 'Server1','Server2'
$logfile = 'c:\scripts\logs\Reg-DLL-log.txt'
foreach($server in $servers){
invoke-command -cn $server -sb{
Param($server)
Function write-log{
[cmdletbinding()]
Param(
[Parameter(ValueFromPipeline=$true,Mandatory=$true)] [ValidateNotNullOrEmpty()]
[string] $Message,
[Parameter()] [ValidateSet(“Error”, “Warn”, “Info”)]
[string] $Level = “Info”,
[Parameter()] [ValidateRange(1,30)]
[Int16] $Indent = 0
)
$msg = "{0} {1}{2}:{3}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Level.ToUpper(), (" " * $Indent), $Message
#This is output to screen
switch ($Level) {
'Error' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Red'}
'Warn' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Yellow'}
'Info' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'white'}
}}
write-log -message 'Begin DLL registration for $server' -level Info
$RegFile = "cimwin32.dll"
regsvr32 $RegFile /s
write-log -message 'registered $RegFile' -level Info
write-log -message 'End DLL registration for $server' -level Info
} -ArgumentList $server
}
выхода журнала в Reg-DLL-log.txt должен выглядеть следующим образом:
2013-06-19 11:25:12 INFO:Begin DLL registration for Server1
2013-06-19 11:25:12 INFO:registered cimwin32.dll
2013-06-19 11:25:12 INFO:End DLL registration for Server1
2013-06-19 11:25:12 INFO:Begin DLL registration for Server2
2013-06-19 11:25:12 INFO:registered cimwin32.dll
2013-06-19 11:25:12 INFO:End DLL registration for Server2
Ваш ответ концептуально идентичен Ansgar так почему добавить его и принять свой собственный ответ, как решение? I.m.o. это отрицает ответ Ансгара, которого он заслуживает ... –