Get-Item 帮助信息

本文介绍 PowerShell 中 Get-Item 命令的使用方法,包括语法、参数及其作用,以及如何利用该命令获取指定路径下的文件夹或文件等项。

 如下说明是翻译PowerShell: help Get-Item 产生的帮助信息.

译者: Edengundam(马涛)
 
Get-Item
 
大纲
取得指定位置的项.
 
语法
Get-Item [-path] <string[]> [-include <string[]>] [-exclude <string[]>] [-filter <string>] [-force] [-credential <PSCredential>] [<CommonParameters>]
 
Get-Item [-literalPath] <string[]> [-include <string[]>] [-exclude <string[]>] [-filter <string>] [-force] [-credential <PSCredential>] [<CommonParameters>]
 
详细描述
Get-Item cmdlet取得指定位置的项. 此命令默认不会取得指定位置项包含的内容, , 但是你可以使用通配符(*)要求返回项的所有内容.
 
Windows PowerShell提供程序使用Get-Item cmdlet来使您能够在不同数据存储的类型中导航.
 
参数
 
-path <string[]>
指定项的路径. Get-Item返回指定位置的项. 允许使用通配符. 此参数是必须的, 但是您可以省略("-Path")参数名.
 
使用点(.)指定当前位置. 使用通配符(*)指定当前为之下的所有项.
 

强制参数?
true
参数位置?
1
默认值
<Current Location>
允许从管道绑定输入?
true (根据值, 根据属性名)
允许通配符扩展?
true
 
-include <string[]>
只取得指定的项. 此参数值限定参数Path. 输入一个路径元素或者模型, 例如"*.txt". 允许使用通配符.
 
参数Include只有在命令包含项的内容时才有效, 例如C:/Windows/*, 这里的通配符指定C:/Windows目录中的所有项.
 

强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
true
 
-exclude <string[]>
忽略指定的项. 此参数值限定参数Path. 输入一个路径元素或者模型, 例如"*.txt". 允许使用通配符.
 
参数Exclude只有在命令包含项的内容时才有效, 例如C:/Windows/*, 这里的通配符指定C:/Windows目录中的所有项.
 

强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
true
 
-filter <string>
指定特定provider格式或语言的过滤器.此参数值用于限定Path参数. 过滤器的语法取决于provider(是否支持通配符也依赖provider). 过滤器相比其他参数更加有效, 主要因为provider取值时候使用过滤器, 而不是等到provider将所有内容返回后, Windows PowerShell 过滤对象.
 

强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
false
 
-force <SwitchParameter>
在不破坏安全性的前提下, 能够避免影响命令成功执行的限制条件, 例如: Force参数能够覆盖具有只读属性的文件或创建路径中的必要成分, 但是不会改变人和文件的权限.
 

强制参数?
false
参数位置?
named
默认值
False
允许从管道绑定输入?
false
允许通配符扩展?
false
 
-credential <PSCredential>
使用其他凭证进行资源访问认证. <Credential>代表着用户名(例如: "User01""Domain01/User01") 或者PSCredential对象(例如: 通过Get-Credential cmdlet取得的对象). 如果此处使用用户名, 命令执行时会提示输入该用户密码. 尽管此参数出现, 但是并非所有Windows PowerShell核心cmdletsproviders支持此功能.
 

强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
true (根据属性名)
允许通配符扩展?
false
 
-literalPath <string[]>
指定项的路径. Path不同, LiteralPath的值被直接使用, 不会对任何通配符进行解释. 如果路径中包含了转义字符, 需要将路径用单引号保护. 单引号指示Windows PowerShell不对字符串中的转义字符进行处理.
 

强制参数?
true
参数位置?
1
默认值
 
允许从管道绑定输入?
true (根据属性名)
允许通配符扩展?
false
 
<公共参数>
此命令支持公共参数: -Verbose, -Debug, -ErrorAction, -ErrorVariable, and -OutVariable. 更多信息, 输入, "get-help about_commonparameters".
 
输入类型
String
 
返回类型
Any
 
注意
 
更多信息, 输入"Get-Help Get-Item -detailed". 需要技术信息, 输入"Get-Help Get-Item -full".
 
Get-Item不支持Recurse参数, 这是因为此命令只取得指定的一个项,而不是该项的内容. 要递归地取得一个项中的内容使用Get-Childitem.
 
要在注册表中导航, 使用Get-Item取得注册项, 使用Get-ItemProperty取得注册表值和数据. 注册表值被视为注册表项的属性.
 
如果需要为该命令提供多个参数, 请使用逗号进行分隔. 例如, "<parameter-name> <value1>, <value2>".
 
你可以使用Get-Item内建别名"gi". 需要更多信息, 查看 About_Alias.
 
1
 
C:/PS>get-item .
 
此命令取得当前目录. (.)表示当前位置的项(不是其内容).
 
Directory: Microsoft.PowerShell.Core/FileSystem::C:/
 
Mode  LastWriteTime       Length Name
----  -------------       ------ ----
d---- 7/26/2006  10:01 AM        ps-test
 
2
 
C:/PS>get-item *
 
此命令取得当前目录中的所有项. 通配符(*)表示当前项的所有内容.
 
Directory: Microsoft.PowerShell.Core/FileSystem::C:/ps-test
 
Mode  LastWriteTime        Length Name
----- ------------         ------ ----
d---- 7/26/2006   9:29 AM         Logs
d---- 7/26/2006   9:26 AM         Recs
-a--- 7/26/2006   9:28 AM  80     date.csv
-a--- 7/26/2006  10:01 AM  30     filenoext
-a--- 7/26/2006   9:30 AM  11472  process.doc
-a--- 7/14/2006  10:47 AM  30     test.txt
 
3
 
C:/PS>get-item C:/
 
此命令取得C:驱动器的当前目录. 取得的对象只表示目录, 而不是其中的内容.
 
4
 
C:/PS>get-item C:/*
 
此命令取得C:驱动器中的项. 通配符(*)表示容器中的所有项, 而不是只容器.
 
PowerShell, 使用一个星号(*)取得所有内容, 它代替了传统的"*.*"形式. PowerShell, 模式将会按照字面意义进行解释, 也就是说"*.*"将不会取得目录或文件名称中不包含的点的项.
 
5
 
C:/PS>(get-item C:/Windows).LastAccessTime
 
此命令取得C:/Windows目录的LastAccessTime属性. LastAccessTime只是文件系统目录的一个属性. 要查看一个目录上的所有属性, 键入"(Get-Item <directory-name>) | Get-Member".
 
6
 
C:/PS>get-item hklm:/software/microsoft/powershell/1/shellids/microsoft.powershell/*
 
此命令显示Microsoft.PowerShell注册表项的所有内容. 你可以使用Get-ItemWindows PowerShell注册表提供程序取得注册表项和子项, 但是你必须使用Get-ItemProperty取得注册表值和数据.
 
7
 
C:/PS>get-item c:/Windows/* -include *.* -exclude w*
 
此命令取得Windows目录中名称中包含点(.), 但是不以w开头的项. 此命令只有当路径中包含通配符指定取得项的内容时才有效.
 
相关链接
Clear-Item
Copy-Item
Invoke-Item
Move-Item
Set-Item
New-Item
Remove-Item
Rename-Item
about_namespace
<think>嗯,用户遇到了PowerShell中删除命令时出现的DirectoryNotFoundException错误,需要解决这个问题。首先,我得理解这个错误通常是在什么情况下发生的。可能的情况是当用户使用Get-ChildItem配合Remove-Item删除文件或目录时,指定的路径不存在,或者路径中的某些目录已经被删除,但脚本还在尝试访问它们。 接下来,我需要回忆一下PowerShell的相关命令和参数。比如,Get-ChildItem用于获取子项,而Remove-Item用于删除。常见的问题可能出在路径的处理上,比如相对路径和绝对路径的使用是否正确。另外,参数是否正确,比如是否遗漏了-Recurse参数导致无法删除非空目录。 然后,用户提到的错误DirectoryNotFoundException,可能是在执行删除时,路径中的某个目录不存在了。比如,可能在遍历目录结构时,子目录已经被删除,但后续的循环仍然尝试进入该目录,导致找不到路径的错误。这时候,可能需要调整遍历的顺序,比如使用深度优先的方式,或者先处理子目录再处理父目录,避免访问已删除的目录。 另外,可能需要检查路径是否正确,是否存在拼写错误或者权限问题。比如,路径中的特殊字符是否需要转义,或者是否有足够的权限来删除某些受保护的目录。此外,使用-Path参数时,通配符是否正确使用,是否存在误匹配的情况。 然后,参考用户提供的引用内容,特别是引用[2]和[3]中提到的Get-ChildItem的用法,比如使用-Name参数或-Recurse参数来递归查找文件。可能用户在递归删除时没有正确使用这些参数,导致路径处理错误。 解决方案方面,可能需要分步骤处理。首先确认路径存在,使用Test-Path检查路径是否存在。如果路径不存在,可能需要处理异常或者跳过。其次,调整遍历顺序,先处理子项再处理父项,比如使用-Descending参数按深度降序排列,这样先删除子目录再删除父目录,避免出现找不到目录的情况。另外,检查是否使用了正确的参数组合,比如在删除目录时需要加上-Recurse和-Force参数,确保删除非空目录和隐藏文件。 另外,使用-WhatIf参数进行模拟删除,确认将要删除的内容是否正确,避免误删。错误处理方面,可以加入try/catch块来捕获异常,并输出错误信息帮助调试。 可能用户的问题中还涉及到通配符的问题,比如路径中有通配符导致匹配到了不存在的目录,或者通配符没有正确转义。需要检查路径中的通配符是否需要引号包裹,或者使用-LiteralPath参数来避免通配符解析。 最后,可能需要给出具体的示例代码,演示如何正确组合Get-ChildItem和Remove-Item,并处理可能出现的异常情况,确保用户能够按照步骤解决问题。</think>针对PowerShell中使用$Get-ChildItem$和$Remove-Item$时出现的$DirectoryNotFoundException$错误,以下是分步骤解决方案: --- ### 一、错误原因分析 该错误通常发生在以下场景: 1. 路径包含不存在的子目录 2.删除操作与目录遍历顺序冲突 3.通配符匹配到无效路径 4.权限不足或路径拼写错误[^2] --- ### 二、解决方案步骤 #### 1. 验证路径存在性 ```powershell $path = "C:\target" if (Test-Path $path) { Get-ChildItem $path | Remove-Item -Recurse -Force } else { Write-Warning "路径不存在: $path" } ``` #### 2. 调整遍历顺序(关键) 使用**深度优先遍历**避免父目录被提前删除: ```powershell Get-ChildItem $path -Recurse | Sort-Object FullName -Descending | Remove-Item -Force ``` $$ \text{排序公式:} \forall d \in D,\ \text{depth}(d_{\text{child}}) > \text{depth}(d_{\text{parent}}) $$ #### 3. 处理特殊字符路径 使用-LiteralPath参数: ```powershell Get-ChildItem -LiteralPath $path | Remove-Item -Recurse -Force ``` #### 4. 错误捕获机制 ```powershell try { Get-ChildItem $path -ErrorAction Stop | Remove-Item -Recurse -Force -ErrorAction Stop } catch [System.Management.Automation.ItemNotFoundException] { Write-Host "捕获到路径不存在异常: $_" -ForegroundColor Red } ``` --- ### 三、最佳实践建议 1. 添加-WhatIf参数预演操作 ```powershell Get-ChildItem $path | Remove-Item -WhatIf ``` 2. 使用过滤器精准匹配 ```powershell Get-ChildItem $path -Filter "*.tmp" -File ``` 3. 权限检查命令: ```powershell Get-ChildItem $path | ForEach-Object { $_.GetAccessControl() } ``` --- ### 四、典型错误对照表 | 错误现象 | 解决方案 | |---------|---------| | 删除父目录后访问子目录 | 使用Sort-Object调整遍历顺序 | | 路径包含[方括号] | 使用-LiteralPath参数 | | 拒绝访问错误 | 添加-Force参数 | | 通配符匹配过多 | 使用-Include/-Exclude参数[^3] | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值