尝试使用Powershell从远程计算机中检索Reg值

时间:2018-03-29 14:42:50

标签: powershell

我正在尝试使用for each循环从每台计算机检索注册表值,然后将该值输出到csv中的文件夹。 那部分工作正常。我遇到问题的部分是PowerShell连接到远程计算机。

这只在内部运行 我拥有所有工作站的管理员权限 防火墙配置为允许所有流量通过

当我运行此脚本时,我会为它尝试连接的每个工作站收到此错误:

  

Enter-PSSession:连接到远程服务器workstationX失败了   以下错误消息:WinRM无法完成操作。   验证指定的计算机名称是否有效,即计算机   可以通过网络访问,并且防火墙例外   WinRM服务已启用,允许从此计算机进行访问。通过   默认情况下,公共配置文件限制的WinRM防火墙例外   访问同一本地子网内的远程计算机。更多   信息,请参阅about_Remote_Troubleshooting帮助主题。在   C:\ Users \ Rich_Ellis \ Desktop \ O365 \ O365Channels \ O365Channel.ps1:5 char:2   + {Enter-PSSession -ComputerName $ Computer   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(workstationX:String)[Enter-PSSession],PSRemotingTransportException       + FullyQualifiedErrorId:CreateRemoteRunspaceFailed

我的脚本是:

$Computers = Get-Content "C:\Users\Rich_Ellis\Desktop\O365\O365Channels\computers.txt"

    foreach ($Computer in $Computers)

{Enter-PSSession -ComputerName $Computer 

$key = 'HKLM:\SOFTWARE\Microsoft\Office\CLickToRun\Configuration'
(Get-ItemProperty -Path $key -Name CDNBaseUrl).CDNBaseUrl | Export-CSV -path "\\s00itstorage\OfficeChannel\$($env:COMPUTERNAME)-O365Channel03292018.csv"}

任何帮助将不胜感激。 TIA

1 个答案:

答案 0 :(得分:0)

Molding a previous answer to your use-case

$HKEY_LOCAL_MACHINE = 2147483650
$GwmiArgs = @{
    Class     = 'StdRegProv'
    Namespace = 'Root\Default'
    List      = $True
}

ForEach ($Computer in @(Get-Content -Path 'C:\Users\Rich_Ellis\Desktop\O365\O365Channels\computers.txt'))
{
    $GwmiArgs['ComputerName'] = $Computer
    $Registry = Get-WmiObject @GwmiArgs
    $Registry.GetStringValue(
        $HKEY_LOCAL_MACHINE,
        'SOFTWARE\Microsoft\Office\ClickToRun\Configuration',
        'CDNBaseUrl'
    ).sValue | Export-CSV -Path "\\s00itstorage\OfficeChannel\$Computer-O365Channel03292018.csv"
}

这使用wmi而不是psremoting来轮询可能更容易依赖的信息,因为它已经在大多数PC上配置/启用,并且由于DCOM / RPC可以利用IP地址(psremoting默认只支持kerberos)

使用Invoke-WmiMethod代替为每个民意调查创建一个wmi对象,可以进一步改进此解决方案,但我还没有完成这项工作!