2011-10-20 26 views
36

Mam poniższy kod i obecnie ładuje wszystkie informacje na ekranie. Chcę, aby logował się do pliku dziennika w D: \ Apps \ Logs.Utwórz plik dziennika w Powershell

Plik dziennika musi mieć nazwę komputera jest ładowanie przeciw - tak COMPUTERNAME.log

jakiś pomysł jak mogę to zrobić?

Dzięki

$computer = gc env:computername 

$onetcp = ((get-childitem c:\windows\system32\drivers\tcpip.sys).Versioninfo.ProductMajorPart).tostring() $twotcp = ((get-childitem c:\windows\system32\drivers\tcpip.sys).Versioninfo.ProductMinorPart).tostring() $threetcp = ((get-childitem c:\windows\system32\drivers\tcpip.sys).Versioninfo.ProductBuildPart).tostring() $fourtcp = ((get-childitem c:\windows\system32\drivers\tcpip.sys).Versioninfo.ProductPrivatePart).tostring() 


$onedfsr = ((get-childitem c:\windows\system32\dfsrs.exe).Versioninfo.ProductMajorPart).tostring() $twodfsr = ((get-childitem c:\windows\system32\dfsrs.exe).Versioninfo.ProductMinorPart).tostring() $threedfsr = ((get-childitem c:\windows\system32\dfsrs.exe).Versioninfo.ProductBuildPart).tostring() $fourdfsr = ((get-childitem c:\windows\system32\dfsrs.exe).Versioninfo.ProductPrivatePart).tostring() 

write-host TCPIP.sys Version on $computer is: "$onetcp.$twotcp.$threetcp.$fourtcp" Write-Host write-host DFSRS.exe Version on $computer is: "$onedfsr.$twodfsr.$threedfsr.$fourdfsr" 

Write-Host 

If (get-wmiobject win32_share | where-object {$_.Name -eq "REMINST"}) { Write-Host "The REMINST share exists on $computer" } Else { Write-Host "The REMINST share DOES NOT exist on $computer - Please create as per standards" } Write-Host 

$hotfix1 = Get-HotFix -Id KB2450944 -ErrorAction SilentlyContinue $hotfix2 = Get-HotFix -Id KB2582284 -ErrorAction SilentlyContinue $hotfix3 = Get-HotFix -Id KB979808 -ErrorAction SilentlyContinue 

If ($hotfix1) {  Write-Host "Hotfix KB2450944 is installed" 
-BackgroundColor Green -ForegroundColor Black } else { Write-Host "Hotfix KB2450944 is NOT installed - Please ensure you install this hotfix" -ForegroundColor "red" } 


If ($hotfix2) {  Write-Host "Hotfix KB2582284 is installed" 
-BackgroundColor Green -ForegroundColor Black } else { Write-Host "Hotfix KB2582284 is NOT installed - Please ensure you install this hotfix" -ForegroundColor "red" } 

If ($hotfix3) {  Write-Host "Hotfix KB979808 is installed" 
-BackgroundColor Green -ForegroundColor Black } else { Write-Host "Hotfix KB979808 is NOT installed - Please ensure you install this hotfix" -ForegroundColor "red" } 
+0

Log: Termin 'log' nie jest rozpoznawana jako nazwy apletu polecenia, skrypt plik lub obsługiwany program. Sprawdź, czy pisownia nazwy zawierała , sprawdź, czy ścieżka jest prawidłowa, i spróbuj ponownie. Czy masz także funkcję rejestru? – Hecatonchires

Odpowiedz

86

Put to u góry pliku:

$Logfile = "D:\Apps\Logs\$(gc env:computername).log" 

Function LogWrite 
{ 
    Param ([string]$logstring) 

    Add-content $Logfile -value $logstring 
} 

następnie zastąpić połączeniami Write-host z LogWrite.

+0

dzięki - działa dobrze, ale nie wyświetla teraz wersji TCPIP.sys - po prostu pokazuje "TCPIP.sys" - to samo dla DFSR.exe. Zmieniłem Write-Host na LogWrite, ale te dwie nie pokazują wersji w pliku dziennika. Masz również pomysł, jak ponownie zapisać plik dziennika za każdym razem, gdy jest uruchamiany? Obecnie dołącza plik dziennika; chciałby, żeby mógł za każdym razem stworzyć nowy. Dzięki. – lara400

+2

Aby uzyskać właściwości obiektu, należy zamknąć całość w nawiasach za pomocą znaku $ at he front. Spróbuj zmienić to na: '$ (TCPIP.sys)' – JNK

+1

Aby pobrać plik dziennika do ponownego za każdym razem, musisz dodać kolejną sekcję u góry, aby usunąć/utworzyć plik, jeśli istnieje. – JNK

25

Funkcja, która przyjmuje te zasady nieco dalej.

  1. Znaczniki czasu dodawania - nie mogą mieć dziennika bez znaczników czasowych.
  2. Dodaj poziom (domyślnie używa informacji), dzięki czemu możesz wyróżnić duże problemy.
  3. Pozwala na opcjonalne wyjście konsoli. Jeśli nie ustawisz miejsca docelowego dziennika, po prostu je wypompuje.

    Function Write-Log { 
        [CmdletBinding()] 
        Param(
        [Parameter(Mandatory=$False)] 
        [ValidateSet("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") 
        $Line = "$Stamp $Level $Message" 
        If($logfile) { 
         Add-Content $logfile -Value $Line 
        } 
        Else { 
         Write-Output $Line 
        } 
    } 
    
0

Stosując tę ​​Log-Entry framework:

Scenariusz:

Function Main { 
    Log -File "D:\Apps\Logs\$Env:computername.log" 

    $tcp = (get-childitem c:\windows\system32\drivers\tcpip.sys).Versioninfo.ProductVersionRaw 
    $dfs = (get-childitem C:\Windows\Microsoft.NET\Framework\v2.0.50727\dfsvc.exe).Versioninfo.ProductVersionRaw 

    Log "TCPIP.sys Version on $computer is:" $tcp 
    Log "DFSVC.exe Version on $computer is:" $dfs 

    If (get-wmiobject win32_share | where-object {$_.Name -eq "REMINST"}) {Log "The REMINST share exists on $computer"} 
    Else {Log "The REMINST share DOES NOT exist on $computer - Please create as per standards"} 

    "KB2450944", "KB3150513", "KB3176935" | ForEach { 
     $hotfix = Get-HotFix -Id $_ -ErrorAction SilentlyContinue 
     If ($hotfix) {Log -Color Green Hotfix $_ is installed} 
     Else {Log -Color Red Hotfix $_ " is NOT installed - Please ensure you install this hotfix"} 
    } 
} 

wyjście ekranu: Screen output

Log File (w D:\Apps\Logs\<computername>.log):

2017-05-31 Write-Log (version: 01.00.02, PowerShell version: 5.1.14393.1198) 
19:19:29.00 C:\Users\User\PowerShell\Write-Log\Check.ps1 
19:19:29.47 TCPIP.sys Version on is: {Major: 10, Minor: 0, Build: 14393, Revision: 1066, MajorRevision: 0, MinorRevision: 1066} 
19:19:29.50 DFSVC.exe Version on is: {Major: 2, Minor: 0, Build: 50727, Revision: 8745, MajorRevision: 0, MinorRevision: 8745} 
19:19:29.60 The REMINST share DOES NOT exist on - Please create as per standards 
Error at 25,13: Cannot find the requested hotfix on the 'localhost' computer. Verify the input and run the command again. 
19:19:33.41 Hotfix KB2450944 is NOT installed - Please ensure you install this hotfix 
19:19:37.03 Hotfix KB3150513 is installed 
19:19:40.77 Hotfix KB3176935 is installed 
19:19:40.77 End