使用Powershell获取服务器列表的Reg_Binary值

时间:2015-02-26 16:50:19

标签: powershell sccm

所以回到这个......

我有一个服务器列表(server.txt)我需要在此列表中查询Reg_Binary值...

我需要让脚本循环遍历列表 - 如果需要,打开远程注册表,从密钥中获取Reg_Binary(SignaturesLastUpdated)中的值 - “SOFTWARE \ Microsoft \ Microsoft Antimalware \ Signature Updates”

以服务器名称旁边的日期和时间格式输出信息 - 理想情况下是csv(但这不是主要交易) - 最好在每个周期附加一个文件。

然后我需要它将远程reg服务返回到它找到的状态。

我已经花了不少于20次运行并且不愿意修改任何代码 - 谦虚地要求在Powershell拥有更高技能水平的人返回所需脚本的响应。

我正在做所有这一切,因为似乎Microsoft FEP不会使用实时信息更新SCCM,因此报告没有价值 - 如果您知道一种解决方法,那么这是理想的......

对不起,我知道这有很多要问 - 但我已经厌倦了打这个,所以请帮忙。

1 个答案:

答案 0 :(得分:0)

这再次是here答案的延续。由于OP正在寻求处理服务状态,因此这不是重复。

$servers = Get-Content "C:\Windows\System32\List3.txt"
$key="SOFTWARE\Microsoft\Microsoft Antimalware\Signature Updates"
$value = "SignatuesLastUpdated"

$servers | ForEach-Object{
    $server = $_
    Try{
        Get-RegBinary -ComputerName $server -Key $Key -Value $value -ErrorAction Stop
    } Catch [Microsoft.PowerShell.Commands.WriteErrorException]{
        # Couple of reasons for this exception
        If($_.Exception -match "network path was not found"){
            # This was triggered when the service was not running. Attempt to start it. 
            $remoteService = Get-Service -ComputerName $server -Name RemoteRegistry
            If($remoteService.Status -eq "Stopped"){$remoteService | Start-Service}

            # Try and get the key again.
            Try{
                Get-RegBinary -ComputerName $server -Key $Key -Value $value -ErrorAction Stop
            } Catch{
                [pscustomobject]@{
                    ComputerName = $server
                    Data = "Unable to get key after attempting to start service. Possibly does not exist"
                }
            }

            # Restore the service to a stopped state.
            $remoteService | Stop-Service

        } ElseIf($_.Exception -match "Cannot find value") {
            # If the key does not exist.
            [pscustomobject]@{
                ComputerName = $server
                Data = "Key/Value pair does not exist."
            }
        }
    }
    Catch{
        [pscustomobject]@{
            ComputerName = $server
            Data = "Unable to retrieve data"
        }
    }

} | Select ComputerName,@{Label=$value;Expression={If(!($_.Data -is [string])){[System.Text.Encoding]::Ascii.GetBytes($_.data)}Else{$_.Data}}} | Export-csv C:\temp\data.log -NoTypeInformation

来自3台电脑的示例

  1. c3935让他们关键并启动远程服务
  2. C4186没有启动密钥或远程服务服务
  3. C4094有钥匙,但服务最初停止了。
  4. “计算机名”, “测试” “c3935”,“57 55 32 57 56 32 57 57 32 49 48 48 32 49 48 49” “C4186”,“键/值对不存在”。 “C4094”,“57 55 32 57 56 32 49 48 48 32 49 48 49”