我将所有备份列在给定的目录中:
$backups = Get-ChildItem -Path $zipFilepath | Where-Object {($_.lastwritetime -lt (Get-Date).addDays(-7)) -and (-not $_.PSIsContainer) -and ($_.Name -like "backup*")}
如果我将它设置为故意不返回任何文件(.addDays(-600)),则下列内容将显示“Empty”(如预期的那样):
if (!$backups) { "Empty" }
如果我尝试用一个空的$ backupsvariables列出名字:
foreach ($file in $backups) { $file.FullName; }
我没有得到(如预期),如果我改变这个:
"test"+ $file.FullName;
那么我会在“Empty”下面得到一个“testing”。 如果$备份是空的,这怎么可能?
这是Powershell的一个“function”。 您的$backups可能包含多个 $null值和非null值,所以Powershell必须迭代对象来处理foreach 。 事实上,我们都看到$backup为单值标量( $null在这种情况下)无关紧要,至lessMS … 🙂
有关更多详细信息,请参阅此Microsoft Connect Bug报告 – 它在Powershell v3中“固定”。
在v2上:
PS H:\> foreach ( $i in $null ) { "Hi" } Hi
在v3上:
PS H:\> foreach ( $i in $null ) { "Hi" }
(没有输出)