在PowerShell中创build日志文件

我有下面的代码,目前它加载屏幕上的所有信息。 我希望它login到D:\ Apps \ Logs上的日志文件。

日志文件需要有它正在加载的计算机的名称 – 所以COMPUTERNAME.log

任何想法我怎么能做到这一点?

谢谢

$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" } 

把它放在你的文件的顶部:

 $Logfile = "D:\Apps\Logs\$(gc env:computername).log" Function LogWrite { Param ([string]$logstring) Add-content $Logfile -value $logstring } 

然后用LogWritereplace您的Write-host调用。

一个function,这些原则进一步。

  1. 添加时间戳 – 不能有没有时间戳的日志。
  2. 添加一个级别(默认情况下使用INFO)意味着您可以突出显示大问题。
  3. 允许可选的控制台输出。 如果您不设置日志目标,则只需将其抽出。

     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 } } 

依靠日志轮换: https : //gist.github.com/barsv/85c93b599a763206f47aec150fb41ca0

用法:

 . .\logger.ps1 Write-Log "debug message" Write-Log "info message" "INFO" 

使用这个Log-Entry框架:

脚本:

 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"} } } 

屏幕输出: 屏幕输出

日志文件 (位于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