我正在尝试通过监视从网络目录中复制大文件所需的时间来复制最终用户体验。
我正在使用Measure-Command
来查找将项目从网络目录复制到计划此脚本的计算机上(使用 Windows 计划程序(并在 xlsx 中输出时间所需的总时间。
我遇到的问题是,每次此脚本从调度程序(每天(运行时,它都会覆盖前一天的数据,而不是将结果发布到下一个单元格中。当我多次手动运行它时,它工作得很好,并在彼此下面发布单独的结果。我认为问题是它正在通过实例(因此在同一个 PowerShell 实例中运行代码几次会看到$previousRow
工作,但在每日计划中,它每次都会打开一个新实例并覆盖单元格 (1,1( 和 (1,2( 中的旧数据(。
关于如何保存历史数据的任何建议?
$seconds = Measure-Command {
Copy-Item -Path X:shareddrivetest.pdf -Destination C:UsersMeDesktop
} | select TotalSeconds
$erroractionpreference = "SilentlyContinue"
$a = New-Object -ComObject Excel.Application
$dt = Get-Date -Format "MM/dd/yyyy hh:mm:ss"
$a.Workbooks.Open("X:shareddriveoutputtimesample.xlsx")
$a.Visible = $true
$a.Worksheets.Item(1)
$previousRow += 1
$a.Cells.Item($previousRow,1) = "OfficeLocation - " + $dt
$a.Cells.Item($previousRow,2) = $seconds.TotalSeconds
$a.ActiveWorkbook.Save()
$a.Workbooks.Close()
$a.Quit()
Remove-Item -Path C:UsersMeDesktoptest.pdf
不确定是否没有复制所有代码?但看起来你实际上并没有在任何地方定义$previousRow
?因此,您现有的代码运行$previousRow += 1
,并将$previousRow
设置为 1...这意味着每次代码运行时,它都会首先点击第 1 行
为了能够找到包含最后信息的行(即将$previousValue设置为 + 1 的值(,您可以使用以下代码:
$filepath = "C:FolderExcelFile.xlsx"
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $False
$WorkBook = $objExcel.Workbooks.Open($filepath)
$WorkSheet = $objExcel.WorkSheets.item(1)
$WorkSheet.activate()
[int]$lastRowvalue = ($WorkSheet.UsedRange.rows.count + 1) - 1
$lastrow = $WorkSheet.Cells.Item($lastRowvalue, 1).Value2
write-host $previousValue
write-host $lastRowvalue
从此处复制/粘贴(稍作修改(:获取Excel中使用的最后一个单元格的值
这会告诉您最后一行包含数据...因此,在将其设置为$previousRow的值之前,您需要先将其添加到该值上:
$previousRow = $previousRow + 1