【问题标题】:Get-ChildItem through Invoke-WMIMethod or WMI in general通常通过 Invoke-WMIMethod 或 WMI 获取-ChildItem
【发布时间】:2017-01-31 16:15:39
【问题描述】:

有没有办法使用Invoke-WMIMethod 或类似的东西在远程计算机上运行Get-ChildItem?我的用例是我需要找到存在于HKEY_USERS 配置单元中的每个SID。

HKEY_USERS hive 包含一个 SIDS 列表,如下所示:

我想在远程计算机上通过 WMI 获取这些列表,而无需提前知道 SID。这可能吗?

【问题讨论】:

    标签: powershell wmi remote-access get-childitem


    【解决方案1】:

    使用 StdRegProv 注册表提供程序 WMI 类:

    $RemoteComputer = 'computer1.hostname.goes.here'
    $RegProv = [wmiclass]"\\$RemoteComputer\ROOT\DEFAULT:StdRegProv"
    
    # Magic number identifying the HKEY_USERS hive
    $HKU = 2147483651
    
    # Enumerate values under the root key, sNames property will hold key names
    $Keys = $RegProv.EnumKey($HKU,'') |Select-Object -ExpandProperty sNames
    

    在这里,使用Invoke-WmiMethod cmdlet

    $RemoteComputer = 'computer1.hostname.goes.here'
    $ClassPath = "\\$RemoteComputer\ROOT\DEFAULT:StdRegProv"
    $HKU = 2147483651
    
    $Keys = Invoke-WmiMethod -Path $ClassPath -Name EnumKey -ArgumentList 2147483651,'' |Select-Object -ExpandProperty sNames
    

    【讨论】:

    • 谢谢马蒂亚斯,这行得通。不过,有没有办法使用 Invoke-WMIMethod 来做到这一点?我想在我的代码中保持一致。
    • 为什么我不需要提供凭据?我想尽快访问这些HKEY_USERS 蜂巢的内容,-Credentials 标志会解决这个问题吗?
    【解决方案2】:

    这可能是获得所需内容的更简单方法:

    Get-WMIObject Win32_UserProfile -Filter "SID like 'S-1-5-21-*'" -ComputerName ExampleComputer | select SID
    

    【讨论】:

    • 是否需要提供凭据才能访问这些值? HKEY_Users 中的值呢?
    • 运行它的帐户需要管理员权限。这不是从注册表中检索信息,而是来自单独的 WMI 提供程序。 HKEY_Users 中的值与计算机上的用户配置文件相匹配。有一些额外的信息,例如localpath,它主要与用户名一致,我看到你在另一个问题中寻找。
    猜你喜欢
    • 2011-04-01
    • 2011-02-16
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多