|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Сбор сведений на удаленных компьютерах и вывод в консоль |
|
PowerShell - Сбор сведений на удаленных компьютерах и вывод в консоль
|
Старожил Сообщения: 173 |
Добрый день,
Есть скрипт, который на удаленных компьютерах должен собрать информацию: информация берется из некоторых ключей реестра и файла 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} Евгений |
|
Отправлено: 18:00, 14-03-2011 |
Старожил Сообщения: 173
|
Профиль | Отправить PM | Цитировать Так. В чем причина вывода в четыре раза, я нашел.
Если выбросить весь хлам из скрипта, то вот где собака порылась: $pslist = Get-Content pslist.txt foreach ($1 in $pslist) { $INI = Get-Content -Path "\\$1\c$\windows\file.ini" $INI1 = $INI | Select-String "String1", "String2" $Str = $INI1 | Select-String "String1" $StrR = $WSID -replace "String=","" $INI1 | Format-Table ` @{Name="Host";Expression={$1}},` @{Name="String1";Expression={$StrR}} } Похоже это связанно с тем, что я форматирую вывод в таблицу из основного массива, где есть все мне нужные строки и параллельно создаю столбцы из других массивов. Возникает вопрос: Есть несколько массивов, в каждом из них есть нужный мне элемент - данные в строке. Как можно объединить несколько массивов или как передать команде Format-Table информацияю во входные данные с более одного массива, чтобы в одной таблице сформировать данные из нескольких массивов? С уважением, Евгений |
Последний раз редактировалось tarasov.evgeny, 17-03-2011 в 11:24. Отправлено: 10:47, 17-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 173
|
Профиль | Отправить PM | Цитировать Вообщем я сдался
![]() Нашел как это можно скинуть в ячейки Excel Создается файл, затем в ячейки через цикл вносятся данные: Сразу могу сказать, что не получилось: 1. удаление листов не срабатывает - закоментировал. 2. при закрытие таблицы, процесс excel висит в памяти 3. нужно искать, чтобы он это всё сам сохранял $excel = New-Object -ComObject Excel.Application $excel.Visible = $true #добавляем рабочую книгу $workbook = $excel.workbooks.add() #обращаемся к первому листу-книге $sheet = $workbook.worksheets.Item(1) #удаляем лишние книги #$workbook.workSheets.item(2).delete() #$workbook.WorkSheets.item(3).delete() #Задаем массив имен компьютеров $pslist = Get-Content pslist.txt #Переименновываем таблицу $workbook.WorkSheets.item(1).Name = "Processes" #Получаем ссылку на переименовыванную таблицу $sheet = $workbook.WorkSheets.Item("Processes") #Начинаем отчет от второй строки, поскольку в первой строке - имя столбца $x = 2 #Что-то сложное и не понятное - судя по названию для форматирования $lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type] $colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type] $borderWeight = "microsoft.office.interop.excel.xlBorderWeight" -as [type] $chartType = "microsoft.office.interop.excel.xlChartType" -as [type] #Форматируем первую строку - Жирный шрифт и т.д. For ($b = 1; $b -le 2; $b++) { $sheet.cells.item(1,$b).font.bold = $true $sheet.cells.item(1,$b).borders.LineStyle = $lineStyle::xlDashDot $sheet.cells.item(1,$b).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic $sheet.cells.item(1,$b).borders.weight = $borderWeight::xlMedium } #Задаем названия столбцов - первая строка $sheet.cells.item(1,1) = "Host Name" $sheet.cells.item(1,2) = "Str1" $sheet.cells.item(1,3) = "Str2" $sheet.cells.item(1,4) = "Str3" $sheet.cells.item(1,5) = "Ctr4" # Обрабатываем данные в цикле foreach ($1 in $pslist) { $INI = Get-Content -Path "\\$1\c$\windows\file.ini" $Str1 = ($ini | Select-String Str1) -replace "Str1=","" $Str2 = ($ini | Select-String Str2) -replace "Str2","" $Str3 = ($ini | Select-String Str3) -replace "Str3","" $Str4 = ($ini | Select-String Str4) -replace "Str4","" #начинаем писать в ячейки полученные значения $sheet.cells.item($x,1) = $1 $sheet.cells.item($x,2) = $Str1 $sheet.cells.item($x,3) = $Str2 $sheet.cells.item($x,4) = $Str3 $sheet.cells.item($x,5) = $Str4 $x++ } #делаем ячейки по ширине данных $range = $sheet.usedRange $range.EntireColumn.AutoFit() | out-null #end foreach С уважением, Евгений |
Отправлено: 17:19, 18-03-2011 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Сбор информации о железе удаленных ПК | OstJoker | Скриптовые языки администрирования Windows | 9 | 21-11-2012 13:38 | |
Интерфейс - [решено] Пропала область сведений | Vlad_Master | Microsoft Windows 7 | 6 | 28-07-2011 18:43 | |
V. 2007 - Изменение учетных записей outlook2007 на удаленных компьютерах | boalni | Microsoft Exchange Server | 6 | 16-02-2010 12:10 | |
2007 - Изменение учетных записей outlook 2007 на удаленных компьютерах | boalni | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 15-02-2010 12:14 | |
Разное - [решено] Пропала область сведений! | cuentagotas | Microsoft Windows Vista | 1 | 06-01-2009 13:00 |
|