Powershell Get-Item 在某些目录(如 AppData)上不起作用,而 Get-ChildItem 却在
Powershell Get-Item not working on some directories like AppData while Get-ChildItem does
为什么 Get-Item
对某些目录不起作用?例如 gi $env:USERPROFILE\AppData
returns“找不到项目”,但是 ls $env:USERPROFILE\AppData
工作正常并且可以列出文件?
我想使用 gi
将一个字符串传递给它,将它变成一个对象,该对象具有其他成员,例如 LastWriteTime
。如果我将 ls
用于 Get-ChildItem
,我会得到子项,即目录中的文件,而不是目录中的文件。
我可以通过在父级上使用这样的过滤器来解决这个问题:ls -h $env:USERPROFILE | ? {$_.Name -match "AppData"} | select Name,LastWriteTime
- 但必须有更好的方法并且它没有解释为什么 gi
不能直接工作。
AppData
目录设置了隐藏属性:
PS C:\> attrib $env:USERPROFILE\AppData
H C:\Users\username\AppData
隐藏属性是指Get-Item
默认忽略它。解决方法是使用 -Force
:
PS C:\> Get-Item $env:USERPROFILE\AppData -Force
Directory: C:\Users\username
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h-- 11/25/2019 12:41 PM AppData
为什么 Get-Item
对某些目录不起作用?例如 gi $env:USERPROFILE\AppData
returns“找不到项目”,但是 ls $env:USERPROFILE\AppData
工作正常并且可以列出文件?
我想使用 gi
将一个字符串传递给它,将它变成一个对象,该对象具有其他成员,例如 LastWriteTime
。如果我将 ls
用于 Get-ChildItem
,我会得到子项,即目录中的文件,而不是目录中的文件。
我可以通过在父级上使用这样的过滤器来解决这个问题:ls -h $env:USERPROFILE | ? {$_.Name -match "AppData"} | select Name,LastWriteTime
- 但必须有更好的方法并且它没有解释为什么 gi
不能直接工作。
AppData
目录设置了隐藏属性:
PS C:\> attrib $env:USERPROFILE\AppData
H C:\Users\username\AppData
隐藏属性是指Get-Item
默认忽略它。解决方法是使用 -Force
:
PS C:\> Get-Item $env:USERPROFILE\AppData -Force
Directory: C:\Users\username
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h-- 11/25/2019 12:41 PM AppData