【问题标题】:powershell log - new file every daypowershell log - 每天都有新文件
【发布时间】:2017-06-08 12:45:26
【问题描述】:

我将网络状态(nslookup、ping、tracert)记录到日志文件中。日志文件变大,一段时间后很难使用。

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

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

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

编辑:

这是一个非常简单的脚本(下面的简化示例):

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

【问题讨论】:

  • 我们需要更多的上下文;看起来您正在报告来自 NSLookup 的错误。请发布产生错误的代码的Minimal, Complete, and Verifiable Example,以便其他人可以提供有用的帮助。
  • 这是一个非常简单的脚本(下面的简化示例): $log_file = ".\tracert_" + (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) + "]" "rnping 到 '$server)'" >> $log_file & ping $server >> $log_file }
  • 请不要在 cmets 中发布代码,而是编辑您的问题以包含它。
  • 意识到这一点,抱歉。帖子已更新。

标签: powershell time


【解决方案1】:

这是我通常做的事情。

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

【讨论】:

  • 是的,也有,见上文$log_file = ".\network_" + (Get-Date -f yyyy-MM-dd_HH-mm) + ".log"。下面的建议是使用调度程序.. 我可以不用调度程序吗?
  • 是的,我的意思是你不能在文件名中加上get-date。如果你定义$date,然后在文件路径中使用,就可以了。
【解决方案2】:

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

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

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

要让您的脚本在触发 while 语句时创建一个新的日志文件,只需将其包装在一个函数中,然后使用另一个 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}

【讨论】:

  • 这并没有提供问题的答案。一旦你有足够的reputation,你就可以在任何帖子上comment。还要检查这个what can I do instead。
  • 谢谢。我可以在没有调度程序的情况下仅从脚本本身执行它吗?这有可能吗?
  • 是的,这是可能的,但是如果运行脚本的系统重新启动,脚本将停止运行。任务将确保脚本始终运行。
  • 暂时没问题.. 那我该怎么做呢?
【解决方案3】:

您可以考虑我不久前发布的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

【讨论】:

  • 非常感谢@iRon,我一定会看看.. 但是现在(回到原来的问题),是否可以每天或每小时自动创建一个新文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 2014-11-03
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2017-03-22
  • 2013-06-18
相关资源
最近更新 更多