2017-01-17 1 views
0

Во-первых, я хочу отметить, что я PowerShell ScrapBooker и не очень хорошо осведомлен о PowerShell.Powershell Файл журнала

Я работаю над скриптом, который устанавливает BGInfo ... У меня есть фактическая установка и удаление, прекрасно работающие, и теперь я перехожу к тому, чтобы сортировать журналы сортировки.

Я нашел эту статью «Create Log File in Powershell», которая была замечательной и включила эту функцию в мой скрипт.

Function Write-Log { 
[CmdletBinding()] 
Param(
[Parameter(Mandatory=$False)] 
[ValidateSet("LABEL","INFO","WARN","ERROR","FATAL","DEBUG")] 
[String] 
$Level = "INFO", 

[Parameter(Mandatory=$True)] 
[string] 
$Message, 

[Parameter(Mandatory=$False)] 
[string] 
$logfile 
) 

$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") 
IF ($Level -eq "LABEL") { 
    $Line = "$Message" 
    } 
ELSE { 
    $Line = "$Stamp $Level $Message" 
    } 
If($logfile) { 
    Add-Content $logfile -Value $Line 
} 
Else { 
    Write-Output $Line 
} 
} 

Что мне нужно знать, так это использование этого для вывода журнала из команд.

Для примера:

В Мой сценарий у меня есть эта команда:

New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name BgInfo -Value """$InstPath\Bginfo.exe"" $InstPath\$BGTemplateFile $InstOptions" -PropertyType 'String' -Force 

или это одно:

Copy $SourcePath\Bginfo.exe $InstPath 

То, что я хотел бы знать, как я могу использовать функцию чтобы получить ЛЮБОЙ вывод из этой команды и зарегистрировать его в моем файле журнала.

Я предполагаю, что я также хотел бы использовать эту информацию и применять ее к любым другим командам, где я хочу что-то регистрировать.

Надеюсь, это все ясно и имеет смысл, и кто-то может мне помочь.

Cheers,

Dave.

:)

+0

Есть и другие варианты, но посмотрите «Start-Transcript» и посмотрите, соответствует ли он вашим потребностям. –

+0

Спасибо @MatthewWetmore - Я посмотрю на это. :) –

+0

Я не могу правильно ответить на мобильный, но если вы действительно хотите вывести вывод из команд в вашу функцию ведения журнала, этот подход будет «ValueFromPipeline». Завтра я приведу пример. См. Также: https://technet.microsoft.com/en-us/library/hh360993.aspx –

ответ

1

Я считаю, что вы имеете в виду эту функцию:

function Write-Log 
{ 
    [CmdletBinding()] 
    Param 
    ( 
     [Parameter(Mandatory=$true, 
        ValueFromPipelineByPropertyName=$true)] 
     [ValidateNotNullOrEmpty()] 
     [Alias("LogContent")] 
     [string]$Message, 

     [Parameter(Mandatory=$false)] 
     [Alias('LogPath')] 
     [string]$Path='C:\Logs\PowerShellLog.log', 

     [Parameter(Mandatory=$false)] 
     [ValidateSet("Error","Warn","Info")] 
     [string]$Level="Info", 

     [Parameter(Mandatory=$false)] 
     [switch]$NoClobber 
    ) 

    Begin 
    { 
     # Set VerbosePreference to Continue so that verbose messages are displayed. 
     $VerbosePreference = 'Continue' 
    } 
    Process 
    { 

     # If the file already exists and NoClobber was specified, do not write to the log. 
     if ((Test-Path $Path) -AND $NoClobber) { 
      Write-Error "Log file $Path already exists, and you specified NoClobber. Either delete the file or specify a different name." 
      Return 
      } 

     # If attempting to write to a log file in a folder/path that doesn't exist create the file including the path. 
     elseif (!(Test-Path $Path)) { 
      Write-Verbose "Creating $Path." 
      $NewLogFile = New-Item $Path -Force -ItemType File 
      } 

     else { 
      # Nothing to see here yet. 
      } 

     # Format Date for our Log File 
     $FormattedDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss" 

     # Write message to error, warning, or verbose pipeline and specify $LevelText 
     switch ($Level) { 
      'Error' { 
       Write-Error $Message 
       $LevelText = 'ERROR:' 
       } 
      'Warn' { 
       Write-Warning $Message 
       $LevelText = 'WARNING:' 
       } 
      'Info' { 
       Write-Verbose $Message 
       $LevelText = 'INFO:' 
       } 
      } 

     # Write log entry to $Path 
     "$FormattedDate $LevelText $Message" | Out-File -FilePath $Path -Append 
    } 
    End 
    { 
    } 
} 

Usage:

Write-Log -Message 'My log Error Message' -Path c:\Logs\Script.log -Level Error 

Write-Log -Message 'My log Warning message' -Level Warn 

Примечание: По умолчанию его хранения в C: \ журналы \ PowershellLog.log. Вы также можете изменить его на лету во время использования, и вы можете жестко закодировать его в самой функции.

Надеюсь, это поможет.

+0

Это же функция, но вы пропустили настоящий вопрос в сообщении. –

+0

Вы упомянули, как захватить любой вывод и поместить его в журнал, если я не ошибаюсь @DavidBuckley –

+0

Да .. однако ваша функция делает то же самое, что моя делает ..., которая позволяет мне отправлять сообщения в файл журнала. .. то, что он не делает, это захват вывода из некоторых команд ... если они являются ошибками или нет, и отправить их в файл журнала, используя мою функцию. Пожалуйста, перечитайте примеры. –