powershell日志 - 每天都有新文件

时间:2017-06-08 12:45:26

标签: powershell time

我将网络状态(nslookup,ping,tracert)记录到日志文件中。日志文件大小增加,一段时间后很难处理。

我正在寻找一种方法来为每天创建一个新的日志文件。我相信这很容易,但我找不到办法。

当我将日志文件名设置为$log_file = ".\network_" + (Get-Date -f yyyy-MM-dd) + ".log"时希望它会在日期更改时创建新文件,但它不起作用。相反,我得到Non-authoritative answer:

抱歉新手问题,但我真的没有找到任何答案。 THX!

编辑:

这是非常简单的脚本(下面的缩写示例):

$log_file = ".\network_" + (Get-Date -f yyyy-MM-dd_HH-mm) + ".log"
$server = "server.com"
$gateway = (Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
& ipconfig /all >> $log_file

while($true) {
$timestamp = "rnrn[" + (Get-Date -f yyyy-MM-dd) + " " +(Get-Date -f HH:mm:ss) + "]"
$timestamp >> $log_file
"rnrn" >> $log_file
"ping to $server)" >> $log_file
& ping $server >> $log_file
}

3 个答案:

答案 0 :(得分:1)

这是我通常做的事情。

$Date = get-date -format yyyy-MM-dd
$log_file = "\\Share\folder\folder\FileName-$date.log"

答案 1 :(得分:1)

您可能会考虑我之前发布的Log-Entry framework(也在GitHub上):

它基本上具有您要求的所有功能:

  • 如果文件超过~100Kb(默认值)
  • ,文件会自动截断
  • 时间戳
  • 内联日志记录
  • 正确的类型转换(例如,注意$gateway在我的情况下也有$Null属性)
Function Main {
    Log -File ".\Network.log"
    $server = Log "Server:" "192.168.1.1" ?
    $gateway = Log "Gateway:" (Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway ?
    Log "IP Config:" ((& ipconfig /all) -Join "`r`n")
    Log "Ping to $Server" ((& ping $server) -Join "`r`n")
}

日志将如下所示:

2017-06-08  Test (version: 01.00.02, PowerShell version: 5.X.X5063.296)
09:13:14.01 C:\Users\User\Network.ps1 
15:28:14.67 Server: 192.168.X.X
15:28:14.75 Gateway: @($Null, "192.168.X.X")
15:28:14.78 IP Config: Windows IP Configuration
            Host Name . . . . . . . . . . . . : Computer
            Primary Dns Suffix  . . . . . . . :
            Node Type . . . . . . . . . . . . : Hybrid
            IP Routing Enabled. . . . . . . . : No
            WINS Proxy Enabled. . . . . . . . : No
            DNS Suffix Search List. . . . . . : lan
            Ethernet adapter Ethernet:
            Connection-specific DNS Suffix  . : lan
            Description . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Connection
            Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX
            DHCP Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            Link-local IPv6 Address . . . . . : XXXX::XXXX:XXXX:XXXX:XXXX%8(Preferred)
            IPv4 Address. . . . . . . . . . . : 192.168.X.X(Preferred)
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Lease Obtained. . . . . . . . . . : Thursday, June 8, 2017 9:08:58 AM
            Lease Expires . . . . . . . . . . : Friday, June 9, 2017 9:08:57 AM
            Default Gateway . . . . . . . . . : 192.168.X.X
            DHCP Server . . . . . . . . . . . : 192.168.X.X
            DHCPv6 IAID . . . . . . . . . . . : 9808.X.X
            DHCPv6 Client DUID. . . . . . . . : XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX
            DNS Servers . . . . . . . . . . . : 192.168.X.X
            NetBIOS over Tcpip. . . . . . . . : Enabled
            Ethernet adapter VirtualBox Host-Only Network:
            Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
            Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX
            DHCP Enabled. . . . . . . . . . . : No
            Autoconfiguration Enabled . . . . : Yes
            Link-local IPv6 Address . . . . . : XXXX::XXXX:XXXX:XXXX:XXXX%5(Preferred)
            IPv4 Address. . . . . . . . . . . : 192.168.X.X(Preferred)
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Default Gateway . . . . . . . . . :
            DHCPv6 IAID . . . . . . . . . . . : 420085799
            DHCPv6 Client DUID. . . . . . . . : XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX
            DNS Servers . . . . . . . . . . . : XXXX:0:0:XXXX:.X.X
            XXXX:0:0:XXXX::2%1
            XXXX:0:0:XXXX::3%1
            NetBIOS over Tcpip. . . . . . . . : Enabled
            Wireless LAN adapter Wi-Fi:
            Media State . . . . . . . . . . . : Media disconnected
            Connection-specific DNS Suffix  . : lan
            Description . . . . . . . . . . . : Intel(R) Centrino(R) AdvancXX-N 6235
            Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX
            DHCP Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            Wireless LAN adapter Local Area Connection* 2:
            Media State . . . . . . . . . . . : Media disconnected
            Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
            Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX
            DHCP Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            Ethernet adapter Bluetooth Network Connection:
            Media State . . . . . . . . . . . : Media disconnected
            Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : Bluetooth Device (Personal Area Network)
            Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX
            DHCP Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
15:28:17.82 Ping to 192.168.X.X Pinging 192.168.X.X with 32 bytes of data:
            Reply from 192.168.X.X: bytes=32 time<1ms TTL=64
            Reply from 192.168.X.X: bytes=32 time=1ms TTL=64
            Reply from 192.168.X.X: bytes=32 time<1ms TTL=64
            Reply from 192.168.X.X: bytes=32 time<1ms TTL=64
            Ping statistics for 192.168.X.X:
            Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
            Approximate round trip times in milli-seconds:
            Minimum = 0ms, Maximum = 1ms, Average = 0ms
15:28:17.84 End

答案 2 :(得分:1)

我建议在日志文件名中包含日期/时间(yyyy-MM-dd_HH-mm-ss)(以防止重复的文件名),并安排脚本每天/每小时或每次运行。如果任务运行X个小时,只需告诉任务调度程序服务结束任务,其中X在计划再次启动之前是正确的。这应该会根据您认为最合适的计划为您提供新文件的预期结果。这也可以确保即使计算机重新启动,您的脚本也会继续运行。

如果日志文件的大小是您的主要问题,那么我建议根据文件大小而不是日期开始新文件。这样,您就可以准确选择要使用的文件大小。

要执行此操作,只需将while($true)更改为while((Get-Item $log_file).Length -lt "100000"),其中长度是您希望脚本停止的字节数。

要在触发while语句时让脚本创建一个新的日志文件,只需将其包装在一个函数中,然后使用另一个$ true语句调用该函数。

这是改变:

function NetworkLogging {
    $log_file = "$PSScriptRoot\network_" + (Get-Date -f yyyy-MM-dd_HH-mm-ss) + ".log"
    $server = "server.com"
    $gateway = (Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
    & ipconfig /all >> $log_file

    while((Get-Item $log_file).Length -lt "100000") {
    $timestamp = "rnrn[" + (Get-Date -f yyyy-MM-dd) + " " +(Get-Date -f HH:mm:ss) + "]"
    $timestamp >> $log_file
    "rnrn" >> $log_file
    "ping to $server)" >> $log_file
    & ping $server >> $log_file
    }
}

while ($true){NetworkLogging}