將文件項傳遞給函數並在foreach循環中使用$ input時,我遇到了一些奇怪的行爲(如非確定性行爲)。
我打電話給我的功能是這樣的...
get-childitem Stuff | Create-Zip C:\Stuff.zip
其中「東西」,包含了一些包含目錄和子目錄的文件夾。問題是,在重複運行時,不管它們是否爲空,某些頂級目錄都不會被複制。
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
}
}
的問題幾乎是直接複製似乎是開始睡眠線 - 如果我省略此完全,zip文件是空的......如果我把它增加到10秒,zip文件通常是滿的。爲什麼會這樣呢,還有更好的方法來寫這個,而不依賴於睡眠值嗎?