首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell Get-ChildItem和跳过

PowerShell Get-ChildItem和跳过
EN

Stack Overflow用户
提问于 2013-07-01 23:05:47
回答 2查看 2K关注 0票数 2

我正在编写一个PowerShell脚本,该脚本删除X个最新文件夹之外的所有文件夹,不包括名为Data的文件夹。我收集要删除的文件夹的语句如下所示:

代码语言:javascript
复制
$folders1 = Get-ChildItem $parentFolderName | 
     ? { $_.PSIsContainer -and $_.Name -ne "Data" } | 
     sort CreationTime -desc | 
     select -Skip $numberOfFoldersToKeep

foreach ($objItem in $folders1) {
    Write-Host $webServerLocation\$objItem
    Remove-Item -Recurse -Force $parentFolderName\$objItem -WhatIf
}

当我传递的$numberOfFoldersToKeep少于起始目录$parentFolderName中的文件夹数时,这种方法效果很好。例如,在我的目标文件夹中有5个子目录,这将按预期工作:

代码语言:javascript
复制
myScript.ps1 C:\StartingFolder 3

但是,如果我要传递大量要跳过的文件夹,我的语句似乎会返回$parentFolderName本身的值!所以这是行不通的:

代码语言:javascript
复制
myScript.ps1 C:\StartingFolder 15

因为跳过变量超过了Get-ChildItem集合中的项数,所以脚本尝试删除C:\StartingFolder\,这完全不是我所期望的。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 23:48:44

试试这个:

代码语言:javascript
复制
$folders1 = Get-ChildItem $parentFolderName | 
     ? { $_.PSIsContainer -and $_.Name -ne "Data" } | 
     sort CreationTime -desc | 
     select -Skip $numberOfFoldersToKeep
    if ($folder1 -neq $null)

{

foreach ($objItem in $folders1) {


        Write-Host $($objItem.fullname)




 Remove-Item -Recurse -Force $objItem.fullname -WhatIf
    }
    }
票数 2
EN

Stack Overflow用户

发布于 2013-07-02 00:12:27

我把答案归功于@C.B.,但还有另一种解决问题的方法,那就是使用@( ... )语法将Get-ChildItem的输出强制转换为数组。

代码语言:javascript
复制
$folders1 = @(Get-ChildItem $parentFolderName | 
     ? { $_.PSIsContainer -and $_.Name -ne "Data" } | 
     sort CreationTime -desc | 
     select -Skip $numberOfFoldersToKeep)

foreach ($objItem in $folders1) {
    Write-Host $webServerLocation\$objItem
    Remove-Item -Recurse -Force $parentFolderName\$objItem -WhatIf
}

这将返回一个长度为零的数组,因此foreach语句的主体不会被执行。

正如C.B.在上面的注释中指出的,问题是如果您在PowerShell中将一个null集合传递到一个foreach语句中,则foreach语句的主体将被执行一次。

这对我来说是完全不直观的,因为我来自.NET背景。显然,这对许多其他人来说也是不直观的,因为在MSDN:https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=281908&SiteID=99上有针对这种行为的bug报告。

显然,此错误已在PowerShell V3中修复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17407712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档