Powershell检查计算机列表的版本

时间:2014-12-03 21:12:40

标签: windows powershell

拥有我需要获得IE版本的大量机器列表。

目前只是通过远程注册表连接并将值写入文本文件,逗号分隔为漂亮的Excel视图。

在这个机器列表中,有些服务器和过时的机器不是Windows。我希望能够跳过IE检查,如果不是Windows,但回应失败,然后到下一台机器。

这是我目前正在做的事情,但我不确定它是否正确完成。它还在为非Windows检查IE版本,而不是写失败。

(注意,IE6-8的版本有不同的注册表项,这就是为什么有冗余的IF)

$computernames = Get-Content C:\ps\servers.txt

echo "Server,Status,IE Version;" >> C:\ps\result.txt


foreach ($server in $computernames) {

if (!(Get-Service "Windows Audio" -ErrorAction SilentlyContinue ))

{

$failure = $server + ",Failure,;"
echo $failure >> C:\ps\result.txt

}

else

{

Get-Service -ComputerName $server -Name RemoteRegistry |Start-Service



$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server) 

$IEkey = $reg.OpenSubkey('SOFTWARE\Microsoft\Internet Explorer\') 

If (!$IEKEY) 
    {
    $IEVALUE = '0'  
    }
if ($IEKEY) 
    {

    $IEvalue = $IEkey.GetValue('svcVersion') 
        IF (!$IEVALUE)
        {
        $IEvalue = $IEkey.GetValue('Version') 
        }
    }


$result = $server + ",Success," + $IEvalue + ";"

echo $result >> C:\ps\result.txt

}}

2 个答案:

答案 0 :(得分:0)

您的脚本看起来不错,但在第一次检查中缺少-ComputerName参数:

if (!(Get-Service "Windows Audio" -ComputerName $server -ErrorAction SilentlyContinue ))

{

答案 1 :(得分:0)

实际上最终做的有点不同了。

似乎按预期工作,以防任何人想要这样做。

$computernames = Get-Content C:\ps\servers.txt

echo "Server,Status,IE Version;" >> C:\ps\result.txt


foreach ($server in $computernames) {

Get-Service -ComputerName $server -Name RemoteRegistry -ErrorVariable ERRORFLAG |Start-Service

IF (!$ERRORFLAG) {

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server) 

$IEkey = $reg.OpenSubkey('SOFTWARE\Microsoft\Internet Explorer\') 

If (!$IEKEY) 
    {
    $IEVALUE = '0'  
    }
if ($IEKEY) 
    {

    $IEvalue = $IEkey.GetValue('svcVersion') 
        IF (!$IEVALUE)
        {
        $IEvalue = $IEkey.GetValue('Version') 
        }
    }


$result = $server + ",Success," + $IEvalue + ";"

echo $result >> C:\ps\result.txt
}
ELSE {
$failure = $server + ",Failure,;"
echo $failure >> C:\ps\result.txt}
}