拥有我需要获得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
}}
答案 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}
}