我需要修改我发送给远程用户的服务器活动报告。我现在不得不将这些信息附加到每天早上发出的报告中,而不是查找客户的许可证号码。我知道POSH可以做到这一点,但我还没有接受任何正式的培训,而且我只熟悉我为特定任务创建的内容。
我有一个带有2个标头LIC和CLIENT的csv文件。日志文件以5位数字开始每行,该数字对应于LIC列中的值。我需要在它的LIC值之前在列中附加CLIENT的值。有没有人有任何关于从哪里开始构建查询csv文件的函数并为我的报表处理器发送另一个日志文件的想法?在此先感谢您的时间!
csv看起来像:
LIC,CLIENT
12345,Client1
54321,Client2
34251,Client3
该日志目前看起来像:
12345_file.txt,9/11/18,08:15:45
54321_file.txt,9/10/18,11:46:55
我希望日志看起来像:
Client1,12345_file.txt,9/11/18,08:15:45
Client2,54321_file.txt,9/10/18,11:46:55
示例脚本:
$licenseFile = "licenses.csv"
$logfile = "logfile.txt"
$newLogfile = "logfile2.txt"
$licenseRows = Import-Csv $licenseFile
Import-Csv $logFile -Header "Filename","Date","Time" | ForEach-Object {
$row = $_
@(
($licenseRows | Where-Object { $_.LIC -eq ($row.Filename -split "_")[0] }).CLIENT
$row.Filename
$row.Date
$row.Time
) -join ","
} | Out-File $newLogfile
当然,更改顶部的3个文件名以满足您的要求。
(此脚本假定每个许可证号只有一个客户端编号,并且日志文件中存在匹配项。)
试试这个:
$Clients=import-csv "c:\temp\client.txt"
import-csv "c:\temp\log.txt" -Header FileName, Date1, Time1 | %{
$Client=$Clients | where Lic -eq ($_.FileName -split '_')[0] | select -first 1
if ($Client -ne $null)
{
Add-Member -InputObject $_ -MemberType NoteProperty -Value $Client.CLIENT -Name Client
$_
}
} | export-csv "c:\temp\result.csv" -NoType