为什么 PowerShell 认为 C:\Windows\System32\WDI 不存在?如何使用 PowerShell 复制这些日志文件?

Why does PowerShell think C:\Windows\System32\WDI doesn't exist? How can I copy these log files with PowerShell?

我知道 C:\Windows\System32\WDI 存在并且有内容。我们需要从数百台机器上复制这些内容进行安全分析。我们尝试了:

Copy-Item 'C:\Windows\System32\WDI' -Destination .\my_output_dir\wdi -recurse

这适用于我的个人计算机(我认为我自己通过 gui 拥有 system32 的权限),但不适用于其他计算机上的我的同事。

在其他机器上,我们得到一个错误:

Copy-Item : Cannot find path 'C:\Windows\System32\WDI' because it does not exist.
At line:1 char:1
+ Copy-Item 'C:\Windows\System32\WDI' -Destination .\my_output_dir\wdi  ...
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Windows\System32\WDI:String) [Copy-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand

在每台机器上进入 GUI 给自己必要的权限是不可行的。这怎么能纯粹通过powershell来实现呢?我们有管理凭证。

最可能的解释是无法找到目录是由于 32 位 64 位系统上的 PowerShell 会话中的 运行:System32 32 位进程看到的目录没有 WDI 子目录。

您有两个选择:

  • 确保在任何地方都使用 64 位 PowerShell 会话。

  • 有条件地构造目录路径,以便在32位会话中它通过SysNative文件夹访问目录,该文件夹指的是是的,(矛盾的命名)64 位 System32 文件夹;以 Get-ChildItem 为例:

Get-ChildItem "$env:SystemRoot$(('SysNative', 'System32')[[Environment]::Is64BitProcess])\WDI"

注:

  • 如果您仍然需要对 PowerShell long-obsolete v2 的支持,请将 $env:ProgramFiles -notlike '*(x86)' 替换为 [Environment]::Is64BitProcess

  • 访问WDI目录中的文件和目录需要权限(运行作为管理员)。