【问题标题】:Accurate time measurements when copying data via powershell通过 powershell 复制数据时的准确时间测量
【发布时间】:2021-05-03 18:39:45
【问题描述】:

您好,我一直在尝试找到一种方法来帮助我估计将数据库从一个位置移动到另一个位置需要多长时间。到目前为止,我的在线研究已经帮助我解决了一些问题,但我似乎被卡住了,因为我使用似乎是正确的命令来查看所有需要计数的文件,但它又回到了 5TB 的数据库中只需要 22 毫秒,所以要么我拥有更快的网络和服务器,我什至知道,要么我搞砸了一些我看不到的东西。

$item = get-childitem 'D:\SQL01' -Recurse
$d = "E:\SQL01"
$results = @()

$results = Foreach ($i in $item) {
Measure-Command -Expression {
Copy-Item -literalpath $i $d
    }
}

($results | Measure-Object -Property TotalSeconds -Sum).Sum


$results -f "c"

阅读这似乎很好,它甚至返回时间的总和,但没有办法是准确的。如果有人看到我做错了什么,或者您认为我可以尝试不同的方法,请发表评论。

【问题讨论】:

  • $CopyCmd = "Copy-Item -literalpath '$i' '$d'" 做任何事情,这就是为什么它只需要 22 毫秒 ;-)
  • 谢谢你,我把它拿出来了,但它仍然以某种方式返回 22 毫秒。
  • 你仍然只是定义一个字符串。如果您希望 Copy-Item 语句实际执行,请删除引号:Copy-Item -LiteralPath $i $d
  • 我刚刚尝试过,但它返回$null 我还尝试从复制项目中删除并从顶部变量中删除递归,并使用Copy-Item -Path $item -recurse -destintion $d 以及在Move-Item 中进行替换虽然还没有运气.不过,我当然感谢您的帮助。
  • “我一直在尝试找到一种方法来帮助我估计将数据库从一个位置移动到另一个位置需要多长时间......”这太复杂了,您可能正在寻找什么因为是Write-Progress

标签: performance powershell time


【解决方案1】:

下面是Write-Progress 的示例:

# Get all directories on D:\SQL01 recursively
$directories = Get-ChildItem 'D:\SQL01' -Directory -Recurse
# Set a destination folder
$destination = 'E:\SQL01'

$dirCount = $directories.count

$i=0;foreach($directory in $directories)
{
    $progress = @{
        Activity = "Copying - {0}" -f $directory.FullName
        Status = "Folder $i of $dirCount"
        PercentComplete = $i++ / $dirCount * 100
    }
    Write-Progress @progress

    Copy-Item -Path $directory -Destination $destination -Recurse
}

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2011-05-16
    • 2010-12-13
    • 2011-11-04
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2021-07-31
    相关资源
    最近更新 更多