tarasov.evgeny
14-03-2011, 18:00
Добрый день,
Есть скрипт, который на удаленных компьютерах должен собрать информацию:
информация берется из некоторых ключей реестра и файла INI - определенные строки и их значения
далее всё это должно выводиться в таблицу:
Имя хоста, первое значение, второе значение, третье значение и т.д.
В принципе скрипт работает - информацию собирает, но выводит её несколько раз подряд. Т.е. если я хочу собрать информацию с одного компьютера - он её выведет на экран четыре раза. Не как не могу понять, где "накосячил".
Сам скрипт:
$pslist = Get-Content pslist.txt
foreach ($1 in $pslist) {
IF (Test-connection -Quiet -Delay 1 -Count 2 -ErrorAction SilentlyContinue -ComputerName $1)
{
$type = [Microsoft.Win32.RegistryHive]::LocalMachine
$regkey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, "$1")
$regkey1 = $regkey.OpenSubKey("SOFTWARE\ODBC\ODBC.INI\CRM")
$REG = $regkey1.GetValueNames() | Select-Object @{Name="Name"; Expression={$_}}, @{Name="Value"; Expression={$regKey1.GetValue($_)}}
$INI = Get-Content -Path "\\$1\c$\windows\file.ini"
$CRM = $INI | Select-String "WSID","CTIAgentTelefon","isSip","CTILogFile"
$INI | Select-String "WSID","CTIAgentTelefon","isSip","CTILogFile" | `
Format-Table -AutoSize `
@{Name="Host";Expression={$1}},`
@{Name="WSID";Expression={$CRM[0]}},`
@{Name="Phone";Expression={$CRM[1]}},`
@{Name="Path LogFile";Expression={$CRM[2]}},`
@{Name="isSip";Expression={$CRM[3]}},`
@{Name="REGISTER_SERVER"; Expression={$REG[1]}}
}
Else {"Компьютер $1 выключен"}
}
на выходе получаем вот такой результат:
Host WSID Phone Path LogFile isSip REGISTER_SERVER
---- ---- ----- ------------ ----- ---------------
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
В создание $REG - знаю очень муторно, просто подсмотрел в книжке - как сделать по проще пока не знаю.
Евгений
Есть скрипт, который на удаленных компьютерах должен собрать информацию:
информация берется из некоторых ключей реестра и файла INI - определенные строки и их значения
далее всё это должно выводиться в таблицу:
Имя хоста, первое значение, второе значение, третье значение и т.д.
В принципе скрипт работает - информацию собирает, но выводит её несколько раз подряд. Т.е. если я хочу собрать информацию с одного компьютера - он её выведет на экран четыре раза. Не как не могу понять, где "накосячил".
Сам скрипт:
$pslist = Get-Content pslist.txt
foreach ($1 in $pslist) {
IF (Test-connection -Quiet -Delay 1 -Count 2 -ErrorAction SilentlyContinue -ComputerName $1)
{
$type = [Microsoft.Win32.RegistryHive]::LocalMachine
$regkey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, "$1")
$regkey1 = $regkey.OpenSubKey("SOFTWARE\ODBC\ODBC.INI\CRM")
$REG = $regkey1.GetValueNames() | Select-Object @{Name="Name"; Expression={$_}}, @{Name="Value"; Expression={$regKey1.GetValue($_)}}
$INI = Get-Content -Path "\\$1\c$\windows\file.ini"
$CRM = $INI | Select-String "WSID","CTIAgentTelefon","isSip","CTILogFile"
$INI | Select-String "WSID","CTIAgentTelefon","isSip","CTILogFile" | `
Format-Table -AutoSize `
@{Name="Host";Expression={$1}},`
@{Name="WSID";Expression={$CRM[0]}},`
@{Name="Phone";Expression={$CRM[1]}},`
@{Name="Path LogFile";Expression={$CRM[2]}},`
@{Name="isSip";Expression={$CRM[3]}},`
@{Name="REGISTER_SERVER"; Expression={$REG[1]}}
}
Else {"Компьютер $1 выключен"}
}
на выходе получаем вот такой результат:
Host WSID Phone Path LogFile isSip REGISTER_SERVER
---- ---- ----- ------------ ----- ---------------
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
comp01 WSID=0012 CTIAgentTelefon=512 CTILogFile=C:\CRM.log isSip=0 @{Name=Server; Value=Ser1}
В создание $REG - знаю очень муторно, просто подсмотрел в книжке - как сделать по проще пока не знаю.
Евгений