【问题标题】:PowerShell - Why does Get-ChildItem does not return any outputPowerShell - 为什么 Get-ChildItem 不返回任何输出
【发布时间】:2020-06-03 11:33:06
【问题描述】:

我正在尝试获取在日期时间范围内创建的文件名。

[datetime]$start = '2020-06-01 10:00:00'
[datetime]$end = '2020-06-01 11:00:00'
Get-ChildItem -Path C:\Test -Name | Where-Object { $_.LastWriteTime -gt $start -and $_.LastWriteTime -lt $end }

为什么这段代码没有返回任何东西?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    使用-Name 参数只返回文件名作为字符串类型而不是对象。因此它没有LastWriteTime 属性可供搜索。

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7

    PS C:\> (gci)[0].GetType() 
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     DirectoryInfo                            System.IO.FileSystemInfo
    
    
    PS C:\> (gci -Name)[0].GetType()  
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    
    PS C:\> gci 
    
    
        Directory: C:\
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-----        2/11/2019  12:08 AM                %homeshare%
    d-----        5/12/2019   2:54 PM                Code
    d-----       21/03/2019   5:11 PM                Intel
    d-----       28/10/2019   9:54 AM                Microsoft
    d-----       13/12/2019   5:15 PM                NVIDIA
    d-r---       28/05/2020   7:27 PM                Program Files
    d-r---        4/05/2020  11:00 AM                Program Files (x86)
    d-r---       17/02/2020   1:43 PM                Users
    d-----       31/05/2020  10:50 PM                Windows
    

    VS-Name

    PS C:\> gci -Name 
    %homeshare%
    Code
    Intel
    Microsoft
    NVIDIA
    Program Files       
    Program Files (x86) 
    Users
    Windows
    

    您可以过滤对象,然后根据需要选择名称:

    PS C:\> gci | Where-Object { $_.LastWriteTime -gt (Get-Date -Year 2020 -Month 1 -Day 10) } | Select-Object Name
    
    Name
    ----
    Program Files
    Program Files (x86)
    Users
    Windows
    SUService.log
    

    如果需要文件路径而不是文件名,可以使用FullName:

    FullName
    --------
    C:\Program Files
    C:\Program Files (x86)
    

    【讨论】:

    • +1。包括如何使用Get-ChildItem ... | Where-Object { ... } | Select-Object -ExpandProperty 'Name' 获得所需的输出可能会有所帮助。
    • 试过 Get-ChildItem -Path C:\Test | Where-Object { $_.LastWriteTime -gt $start -and $_.LastWriteTime -lt $end } | Select-Object -ExpandProperty 'Name' 但它仍然没有返回任何东西
    • 感谢您的澄清,但我仍然如何将文件名作为字符串输出?
    • @CheangWaiBin 我已经更新了帖子。您可以通过管道传输到过滤后的输出并在最后抓取字符串。谢谢培根,好点子。
    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多