【发布时间】:2012-10-02 13:03:27
【问题描述】:
在将文件项传递给函数然后在 foreach 循环中使用 $input 时,我遇到了一些奇怪的行为(如在非确定性中)。
我这样调用我的函数...
get-childitem Stuff | Create-Zip C:\Stuff.zip
其中“Stuff”包含一堆包含目录和子目录的文件夹。问题是,在重复运行时,一些顶级目录不会被复制,无论它们是否为空。
这个函数几乎是http://blogs.msdn.com/b/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx那个函数的直接拷贝
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 文件通常已满。为什么会这样,有没有更好的方法来写这个而不依赖于睡眠值?
【问题讨论】:
标签: powershell foreach comobject