如何在powershell中创建基于文件大小的循环

xxls0lw8  于 2023-02-23  发布在  Shell
关注(0)|答案(1)|浏览(164)

我正在使用intune和PowerShell,我基本上想运行一个 exe 文件,该文件从autodesk网站下载15.2GB / 7932个隔离文件,然后创建一个文本文件,以便 intune 知道它已经完成,因为我想稍后使用另一个脚本删除所有安装文件。
问题是PowerShell脚本将在下载完成之前运行并关闭,intune 认为下载完成,下一个脚本尝试安装下载的内容,但未完全下载,因此失败。
我试过放一个wait命令,但是 intune 会挂起,你必须重新启动windows,这是我不希望用户做的事情。
我想添加一个循环,以便检查以下文件夹的文件大小:

C:\Autodesk\{E658F785-6D4D-4B7F-9BEB-C33C8E0027FA}

一旦达到15. 2 GB/ 7932个文件,它就会转到下一步并创建文本文件。
下面是我当前的PowerShell脚本:

Start-Process -NoNewWindow -FilePath "\\arch-syd-fs\EM Setup\Autodesk Recap Custom Install 2023\Source 1 Download\Revit_2023.exe" -ArgumentList "--quiet' " -Wait
New-Item "C:\Temp\Revit 2023" -Type Directory
New-Item -Path "C:\Temp\Revit 2023\Download Done.txt"
avkwfej4

avkwfej41#

让我们将其分解为3个问题

  • 如何检查目录的大小?
  • 如何检查目录中的文件数?
  • 如何让脚本等待这些检查达到某个值?

原来前两个可以一起做

$dirStats = Get-ChildItem -Recurse -Force 'C:\path\to\whatever' | Measure-Object -Sum Length
$size = $dirStats.Sum
$fileCount = $dirStats.Count

然后,您可以将其 Package 在do-until循环中(带有延迟以防止消耗所有CPU),使脚本等待,直到这些值达到某个阈值

do {
    Start-Sleep 5
    $dirStats = Get-ChildItem -Recurse -Force 'C:\path\to\whatever' | Measure-Object -Sum Length
    $size = $dirStats.Sum
    $fileCount = $dirStats.Count
} until( ($size -ge 15.2*1024*1024*1024) -and ($fileCount -ge 7932) )

请注意,$size以字节为单位,您可能希望将其设置为-or条件而不是-and,具体取决于您希望脚本在满足其中一个条件后返回还是等待两个条件都满足。

相关问题