首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WMI查询和CIM_DataFile递归文件搜索

使用WMI查询和CIM_DataFile递归文件搜索
EN

Stack Overflow用户
提问于 2018-08-16 20:26:12
回答 1查看 2.1K关注 0票数 0

我希望能够查询远程windows桌面中的特定文件,但是我有以下约束:

  1. 我不能假设启用了powershell远程处理。
  2. 我不知道文件的确切位置
  3. 时间是一个因素

这导致了以下查询:SELECT * FROM CIM_DataFile WHERE Drive ='C:'AND FileName='Fake' AND Extension='dll'

与powershell中的Get-childitem相比,这需要相对较长的时间,它允许我通过文件夹和子文件夹来细化搜索。

但是,我总是可以这样做:SELECT * FROM CIM_DataFile WHERE Drive ='C:'AND FileName='Fake' AND Extension='dll' AND Path like '\\Windows\\System32\\%',但是这个查询会增加远程的负载,而且不会花费更少的时间。

有任何方法可以使用WMI进行某种类型的递归搜索吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-19 19:18:33

如果目标计算机上没有启用PowerShell远程处理,则必须使用DCOM连接到WMI。默认情况下,DCOM连接在现代windows系统上是关闭的,因此您必须启用它--在这种情况下,您最好启用PowerShell远程处理。

如果您必须使用WMI,您将需要这样的东西

代码语言:javascript
复制
function get-wmifile {
[CmdletBinding()]
param (
 [Parameter(Mandatory = $true)]
 [string]$path,
 [string]$file
)

if ($path.IndexOf('\\') -le 0 ){
  $path = $path.replace('\', '\\')
}

if ($path.IndexOf('*') -ge 0 ){
  $path = $path.replace('*', '%')
}

Write-Verbose -Message "Path to search: $path"

$folders = Get-CimInstance -ClassName Win32_Directory -Filter "Name LIKE '$path'" 
foreach ($folder in $folders){
 if ($file) {
   Get-CimAssociatedInstance -InputObject $folder -ResultClassName CIM_DataFile |
   where Name -Like "*$file" |
   Select Name
 }
 else {
   Get-CimAssociatedInstance -InputObject $folder -ResultClassName CIM_DataFile |
   Select Name
 }
}

}

将该函数用作

代码语言:javascript
复制
PS> get-wmifile -path 'c:\test*'

Name                              
----                              
c:\test\counters.csv              
c:\test\p1.txt                    
c:\test\test.md                   
c:\test2\p1.txt                   
c:\test2\test3\p2.txt             
c:\testscripts\eventlogchanges.txt
c:\testscripts\tempfolderlog.csv  
c:\testscripts\test.ps1       

或者找到一个文件

代码语言:javascript
复制
PS> get-wmifile -path 'c:\test*' -file 'p1.txt'

Name           
----           
c:\test\p1.txt 
c:\test2\p1.txt

正如您所说的,使用Get- would将比WMI快得多。没有一种方法可以加快WMI访问文件数据的速度,所以我建议坚持使用get-ChildItem。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51884846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档