查看: 514|回复: 0

[文章教程] Powershell 使用文件、文件夹和注册表项

[复制链接]
xuanxiao 发表于 2022-11-25 10:05:25 | 显示全部楼层 |阅读模式
若要查看 Windows 文件夹内的项和子文件夹内包含的任何项,请使用 Get-ChildItem 的 Recurse 参数。 此列出操作显示 Windows 文件夹内的所有内容及其子文件夹中的项。 例如:
  1. PS> Get-ChildItem -Path C:\WINDOWS -Recurse

  2.     Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS
  3.     Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
  4. Mode                LastWriteTime     Length Name
  5. ----                -------------     ------ ----
  6. -a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
  7. ...
复制代码


按名称筛选项 (-Name)
若要仅显示项的名称,请使用 Get-Childitem 的 Name 参数:
  1. PS> Get-ChildItem -Path C:\WINDOWS -Name
  2. addins
  3. AppPatch
  4. assembly
  5. ...
复制代码


强制列出隐藏的项 (-Force)
如果项在文件资源管理器或 Cmd.exe 中通常处于隐藏状态,则它们不会在 Get-ChildItem 命令的输出中显示。 若要显示隐藏的项,请使用 Get-ChildItem 的 Force 参数。 例如:

  1. Get-ChildItem -Path C:\Windows -Force
复制代码

此参数的名称为 Force,因为你可以强制替代 Get-ChildItem 命令的常态行为。 Force 是一个广泛使用的参数,此参数可强制执行 cmdlet 通常不会执行的操作,尽管它不会执行任何危害系统安全的操作。


使用通配符匹配项名称
Get-ChildItem 命令接受要列出的项路径中的通配符。

由于通配符匹配由 Windows PowerShell 引擎处理,因此接受通配符的所有 cmdlet 使用相同的表示法,并具有相同的匹配行为。 Windows PowerShell 通配符表示法包括:

星号 (*) 匹配零个或多个出现的任何字符。

问号 (?) 完全匹配一个字符。

左括号 ([) 字符和右括号 (]) 字符括起一组要匹配的字符。

下面是一些通配符规则工作原理的示例。

若要在 Windows 目录中查找带有后缀 .log 并且基名称中正好有五个字符的所有文件,请输入以下命令:

  1. PS> Get-ChildItem -Path C:\Windows\?????.log

  2.     Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows
  3. Mode                LastWriteTime     Length Name
  4. ----                -------------     ------ ----
  5. ...
  6. -a---        2006-05-11   6:31 PM     204276 ocgen.log
  7. -a---        2006-05-11   6:31 PM      22365 ocmsn.log
  8. ...
  9. -a---        2005-11-11   4:55 AM         64 setup.log
  10. -a---        2005-12-15   2:24 PM      17719 VxSDM.log
  11. ...
复制代码



若要在 Windows 目录中查找以字母 x 开头的所有文件,请键入:

  1. Get-ChildItem -Path C:\Windows\x*
复制代码


若要查找名称以“x”或“z”开头的所有文件,请键入:

  1. Get-ChildItem -Path C:\Windows\[xz]*
复制代码



排除项 (-Exclude)
可以通过使用 Get-ChildItem 的 Exclude 参数来排除特定项。 这可让你在单个声明中执行复杂的筛选。

例如,假设你要尝试在 System32 文件夹中查找 Windows 时间服务 DLL,但只记得 DLL 名称以“W”开头并且其中有“32”。

表达式(如 w*32*.dll)将查找满足条件的所有 DLL,但建议进一步筛选文件并忽略任何 win32 文件。 可以通过使用模式为 win* 的 Exclude 参数来忽略这些文件:

  1. PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

  2.     Directory: C:\WINDOWS\System32

  3. Mode                 LastWriteTime         Length Name
  4. ----                 -------------         ------ ----
  5. -a---           3/18/2019  9:43 PM         495616 w32time.dll
  6. -a---           3/18/2019  9:44 PM          35328 w32topl.dll
  7. -a---           1/24/2020  5:44 PM         401920 Wldap32.dll
  8. -a---          10/10/2019  5:40 PM         442704 ws2_32.dll
  9. -a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
  10. -a---           3/18/2019  9:44 PM          18944 wsock32.dll
  11. -a---           3/18/2019  9:44 PM          64792 wtsapi32.dll
复制代码

混合使用 Get-ChildItem 参数
可以在同一命令中使用 Get-ChildItem cmdlet 的多个参数。 在混合使用参数之前,请确保你了解通配符匹配。 例如,以下命令不会返回任何结果:

  1. Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
复制代码

即使 Windows 文件夹中有两个以字母“z”开头的 DLL,也没有结果。

由于我们已将通配符指定为路径的一部分,因此未返回任何结果。 即使命令是递归的,Get-ChildItem cmdlet 也会将项限制为 Windows 文件夹中名称以 .dll 结尾的项。

若要指定名称匹配特殊模式的文件的递归搜索,请使用 Include 参数。


  1. PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

  2.     Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup

  3. Mode                LastWriteTime     Length Name
  4. ----                -------------     ------ ----
  5. -a---        2004-08-04   8:00 AM       8261 zoneoc.dll

  6.     Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32

  7. Mode                LastWriteTime     Length Name
  8. ----                -------------     ------ ----
  9. -a---        2004-08-04   8:00 AM     337920 zipfldr.dll
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表

在线客服

售前咨询
售后咨询
服务热线
023-58418553
微信公众号