将文件项传递给函数然后在 foreach 循环中使用 $input 时,我遇到了一些奇怪的行为(如在非确定性中)。
我这样调用我的函数...
get-childitem Stuff | Create-Zip C:\Stuff.zip
其中“Stuff”包含一堆包含目录和子目录的文件夹。问题是,在重复运行时,一些顶级目录不会被复制,无论它们是否为空。
function Create-Zip
{
param([string]$zipfile)
set-content $zipfile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfile).IsReadOnly = $false
$shellApplication = new-object -comObject Shell.Application
$zipPackage = $shellApplication.NameSpace($zipfile)
foreach($item in $input)
{
$zipPackage.CopyHere($item.FullName)
Start-sleep -milliseconds 500
}
}
问题似乎出在 Start-Sleep 行 - 如果我完全省略它,则 zip 文件是空的……如果我将它增加到 10 秒,则 zip 文件通常是满的。为什么会这样,有没有更好的方法来编写它而不依赖于睡眠值?