Powershell时间戳

njthzxwz  于 2023-02-16  发布在  Shell
关注(0)|答案(2)|浏览(194)

我尝试在powershell中将日志导出到csv文件,但是在为文件中的每个“日志”放置时间戳时遇到困难。我可以将日志导出到csv文件,但是对于它记录的每个操作,我希望有一个单独的时间戳。例如,我希望在我的csv文件中的输出如下所示,并且每个操作都有一个时间戳(注意操作前的时间戳)

  1. 2020/02/13 93520 - Performing the operation "Remove File" on target "\\03042019-PC\C$\Users\*\AppData\Local\Apps\Test\21.txt".
  2. 2020/02/13 93522 - Performing the operation "Remove File" on target "\\03052019-PC\C$\Users\*\AppData\Local\Apps\Test\51.txt".

任何帮助都将不胜感激!以下是我目前所拥有的:(来自网上调查)

  1. Import-Module ActiveDirectory
  2. $timestamp = "LogFile"
  3. $filepath = "C:\$timestamp.csv"
  4. #$Computers = Get-ADComputer -Filter {Name -like "*-PC"} | Select-Object -ExpandProperty Name
  5. $Computers = Get-ADComputer -Filter {Name -like "03*2019-PC"} | Select-Object -ExpandProperty Name
  6. # Loop through users and delete the file
  7. ForEach ($Computer in $Computers) {
  8. $path = "\\$Computer\C$\Users\*\AppData\Local\Apps\Test\*"
  9. $result = Get-ChildItem -Path $path | Remove-Item -force -verbose *>> $filepath
  10. }
  11. $upperLimit = [datetime]::MaxValue #replace with your own date
  12. $lowerLimit = [datetime]::MinValue #replace with your own date
  13. $log | foreach {
  14. $dateAsText = ($_ -split '\s',2)[0]
  15. try
  16. {
  17. $date = [datetime]::Parse($dateAsText)
  18. if (($lowerLimit -lt $date) -and ($date -lt $upperLimit))
  19. {
  20. $_ #output the current item because it belongs to the requested time frame
  21. }
  22. }
  23. catch [InvalidOperationException]
  24. {
  25. #date is malformed (maybe the line is empty or there is a typo), skip it
  26. }
  27. }
jxct1oxe

jxct1oxe1#

我假设您希望时间戳是当前的日期和时间,尽管我不确定5位数字的含义,例如,示例中的数字93520是什么?
2020年2月13日93520-对目标文件"\03042019-PC\C $\用户 *\应用程序数据\本地\应用程序\测试\21.txt"执行"删除文件"操作。
无论如何,如果您希望日期+时间戳包含当前日期和时间,只需使用get-datecmdlet生成并格式化它,然后使用格式化字符串. More on formatted string here将其连接到日志文本。
示例如下。注:hh:mm:ss tt输出12小时时间(AM/PM)。HH:mm:ss输出24小时时间

    • 代码**
  1. cls
  2. $fakeLogText = '93520 - Performing the operation "Remove File" on target "\03042019-PC\C$\Users*\AppData\Local\Apps\Test\21.txt'
  3. $output = "{0} {1}" -f (get-date -f "yyyy/MM/dd hh:mm:ss tt"), $fakeLogText
  4. $output
  5. $fakeLogText = '93522 - Performing the operation "Remove File" on target "\03052019-PC\C$\Users*\AppData\Local\Apps\Test\51.txt'
  6. $output = "{0} {1}" -f (get-date -f "yyyy/MM/dd hh:mm:ss tt"), $fakeLogText
  7. $output
    • 输出**

另外,我注意到您的程序不会像编写的那样工作,您将$log的内容通过管道传输到foreach中,但是变量$log从未加载数据

    • 更新-工作计划**

这个程序做了我认为你想让它做的事情。注解掉我的临时代码行$Computers = ("MyComputer1", "MyComputer2"),并取消注解你想要的对Get-ADComputer的调用

  1. cls
  2. Import-Module ActiveDirectory
  3. $allUsersTextFileList = @()
  4. #$Computers = Get-ADComputer -Filter {Name -like "03*2019-PC"} | Select-Object -ExpandProperty Name
  5. $Computers = ("MyComputer1", "MyComputer2")
  6. # Loop through users and delete their txt files
  7. ForEach ($Computer in $Computers)
  8. {
  9. #make a list of users
  10. $userPathList = @(Get-ChildItem -Path "\\$Computer\C$\Users\")
  11. foreach ($userPath in $userPathList)
  12. {
  13. #for this user, make a path to their txt files
  14. $userTestFolderPath = ("{0}\AppData\Local\Apps\Test" -f $userPath.Fullname)
  15. #if the path exists, make list of all txt files in the \Test folder
  16. if (test-path -LiteralPath $userTestFolderPath -PathType Container)
  17. {
  18. $userTextFileList = @(Get-ChildItem -Path $userTestFolderPath -Filter *.txt)
  19. #add this user's list to the "all users" list
  20. $allUsersTextFileList += $userTextFileList
  21. }
  22. }
  23. }
  24. $itemList = New-Object System.Collections.ArrayList
  25. $itemList.clear()
  26. $item = [ordered]@{}
  27. foreach ($textFile in $allUsersTextFileList)
  28. {
  29. Remove-Item -force -verbose -LiteralPath $textFile.Fullname
  30. $item.Date = (get-date -f "yyyy/MM/dd hh:mm:ss tt")
  31. $item.File = "Performing the operation 'Remove File' on target {0}" -f $textFile.Fullname
  32. $itemList.add((New-Object PSObject -Property $item)) | out-null
  33. }
  34. $itemList | Export-Csv -LiteralPath "C:\temp\logFile.csv" -NoTypeInformation
展开查看全部
r9f1avp5

r9f1avp52#

不要忘了过滤器,你可以在powershell中使用下面的命令创建一个过滤器

  1. PS> filter timestamp {"$(Get-Date -Format o): $_"}

注意,“timestamp”这个名字是任意的。你可以调用任何东西,然后用管道把任何命令输入到它里面。使用额外的管道到Tee-object来记录输出到一个文件

  1. PS> $file = "MyCool.log"
  2. PS> my_cool_command | timestamp | Tee-object -FilePath $file

相关问题