【问题标题】:Powershell Get-ChildItem returns nothing for folderPowershell Get-ChildItem 不为文件夹返回任何内容
【发布时间】:2020-10-17 04:14:12
【问题描述】:

我的一个朋友让我为他写一个简短的脚本。该脚本应检查特定文件夹,查找所有早于 X 天的文件和子文件夹并将其删除。到目前为止,我写了脚本,在自己的系统上成功测试并发送给他。事情是这样的——它在他的系统上不起作用。更具体地说,Get-ChildItem cmdlet 不会为提供的路径返回任何内容,但它甚至会变得更奇怪,稍后会详细介绍。我使用以下代码首先查找文件和文件夹(并在以后删除它们之前记录它们):

$Folder = "D:\Data\Drive_B$\General\ExchangeFolder"

$CurrentDate = Get-Date
$TimeSpan = "-1"
$DatetoDelete = $CurrentDate.AddDays($TimeSpan)    

$FilesInFolder = (Get-ChildItem -Path $Folder -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.LastWriteTime -lt $DatetoDelete})

所有变量都已填满,我们都知道文件夹已填满了超过一天的文件和子文件夹,这是我们为测试选择的时间跨度。现在,有趣的部分是 Get-ChildItem 不仅不返回任何内容 - 转到文件夹本身并输入“dir”也不返回任何内容。从来没有见过这样的行为。我已经检查了我能想到的所有内容 - 是否是 DFS?、拼写错误、文件夹权限、共享权限、隐藏文件、ExecutionPolicy。一切都应该是为了让这个脚本像在我自己​​的系统上一样在最初测试它时正常工作。该脚本不会返回任何错误。

所以由于某种原因,powershell找不到文件夹的内容。有谁知道为什么会发生这种情况?我在这里不知所措:-/

感谢您的时间和帮助,

弗雷德

【问题讨论】:

  • -ErrorAction SilentlyContinue 对错误检测没有任何帮助。你应该试试-ErrorAction Stop
  • 好吧,dirGet-ChildItem 在 Powershell 中实际上是一样的。运行Get-Alias dir 看看我的意思。尝试进入cmd.exe 并为目录运行dir
  • 由于路径中有美元符号(用于变量),您应该使用单引号来防止 PowerShell 解释它:$Folder = 'D:\Data\Drive_B$\General\ExchangeFolder'
  • 顺便说一句:DateTime.AddDays() 将 [double] 作为参数,而不是字符串,因此请在此处去掉引号:$TimeSpan = -1
  • 根据@iRon 的评论,这确实是问题所在,您也可以使用"D:\Data\Drive_B`$\General\ExchangeFolder" 转义$

标签: powershell directory path get-childitem shared-directory


【解决方案1】:

.AddDays() 需要一个 double 我会使用它。

过滤然后操作

此代码将为您工作。

$folder = Read-Host -Prompt 'File path'

$datetodel = (Get-Date).AddDays(-1)
$results = try{ gci -path $folder -Recurse  | select FullName, LastWriteTime | ?{ $_.LastWriteTime -lt $datetodel}}catch{ $Error[-1] }
$info = "{0} files older than: {1} deleting ...." -f $results.count, $datetodel

if($results | ogv -PassThru){
    [System.Windows.Forms.MessageBox]::Show($info)
    #Put you code here for the removal of the files
    # $results | % del FullName -force
}else{
    [System.Windows.Forms.MessageBox]::Show("Exiting")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多