Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - соединить три скрипта общим выводом.

Ответить
Настройки темы
PowerShell - соединить три скрипта общим выводом.

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Griboed0ff
Дата: 21-04-2020
доброго времени суток. Есть три скрипта, которые написали участники данного форума. Первый снимает
мак-адрес
Код: Выделить весь код
Get-WmiObject Win32_NetworkAdapter -Filter 'AdapterTypeId = 0 and MACAddress is not null' |
select @{n='Сетевая карта';e={$_.macaddress}}|
export-csv 'D:\PowerShell\mac2.csv' -Delimiter ';' -Encoding utf8 -NoTypeInformation
пишет в файл, второй снимает данные о
мониторах
Код: Выделить весь код
$ofs = ''
gwmi wmimonitorid -Namespace root\wmi | Select @{n='UserFriendlyName';e={([string][Char[]]$_.UserFriendlyName).SubString(0,$_.UserFriendlyNameLength)}}, @{n='SerialNumberID';e={[string][Char[]]$_.SerialNumberID}} | export-csv 'D:\PowerShell\monitor2.csv' -Delimiter ';' -Encoding utf8 -NoTypeInformation
пишет в файл, третий собирает данные с веб
морд
[code]
Код: Выделить весь код
param (
	#[parameter(Mandatory=$true)]
	$encode = 65001,
	[string]$outfile = 'table.csv',
	[int]$number = 1
)

function convert ($from, $to){
	begin{
		$fenc = [text.encoding]::getencoding($from)
		$tenc = [text.encoding]::getencoding($to)
	}
	process{
		$a = $tenc.getbytes($_)
		$fenc.getstring($a)
	}
}

[net.servicepointmanager]::securityprotocol = 'ssl3,tls,tls11,tls12'
[array]$arr = $((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$")
$ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q}
$ips|%{
	$html = iwr $_
	$tables = $html.parsedhtml.getelementsbytagname("table")
	$tbl = ($tables|?{($_.getelementsbytagname('table')|%{$_}).count -eq 0})[$number]|%{
		$headers = @();
		$tr = $_|%{$_.getelementsbytagname("tr")}
		if($headers = $tr|?{$_.firstchild().tagname -eq 'th'}|
		%{$_.getelementsbytagname("th")}|select -exp innertext){
			if ($headers -match [char]208){$headers=$headers|convert $encode 28591}
			$headers = $headers.trim()
	 	} else {
			$headers = 1..([linq.parallelenumerable]::max(
				[linq.parallelenumerable]::asparallel($tr.lastchild().cellindex)
			)+1)|%{"H$_"}
		}
		$rowind = ,1 * $headers.count
		$tr.where({$_.firstchild().tagname -eq 'td'})|%{
			$row = $_.getelementsbytagname("td") |? innertext -ne $null| select innertext,rowspan,colspan
			if($row.innertext -match [char]208){
				for($i=0;$i -lt $row.count;$i++){
					$row[$i].innertext = $row[$i].innertext|convert $encode 28591
				}
			}
			try {
				$str = [ordered]@{}
				$k=0
				foreach ($item in $row){
					if ($rowind[$k] -gt 1){
						while ($rowind[$k] -gt 1){
							$str[$headers[$k]] = $null
							$rowind[$k] -= 1
							$k++
						}
					}
					if (($colspan = $item.colspan) -gt 1) {
						$str[$headers[$k]] = if($item.innertext){
							$item.innertext.trim()
						} else {$null}
						if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
						$k++
						while ($colspan -gt 1){
							$str[$headers[$k]] = $null
							$colspan -=1
							if ($rowind[$k] -gt 1){$rowind[$k]-=1}
							$k++
						}
					} else {
						$str[$headers[$k]] = if($item.innertext){
							$item.innertext.trim()
						} else {$null}
						if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
						$k++
					}
				}
				[pscustomobject]$str
			} catch {
				write-host Разметка заголовков не соответствует размерам строк -for red
				write-host $_ -for cyan
			}
		}
	}
	[pscustomobject]@{
		'IP'				= $_
		'MAC-адрес' 		= $tbl[([array]::indexof($tbl.h1,'MAC-адрес'))].h2
		'Номер телефона'	= if ([array]::indexof($tbl.h1,'Номер телефона') -ne -1){
								$tbl[([array]::indexof($tbl.h1,'Номер телефона'))].h2
							  } else {
							  	$tbl[([array]::indexof($tbl.h1,'Номер телефона 1'))].h2
							  }
		'Серийный номер'	= $tbl[([array]::indexof($tbl.h1,'Серийный номер'))].h2
		'Номер модели'		= $tbl[([array]::indexof($tbl.h1,'Номер модели'))].h2
	}
} |export-csv D:\PowerShell\123.csv -notype -enc utf8 -d ';'
устройств пишет в файл. Просьба помочь собрать франкенштейна в один файл скрипта и сделать общий вывод в один файл всей инфы, что он собирает.

Отправлено: 07:39, 20-04-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
уже залезли и дали подсказку »
Это лежит на поверхности, но я не собираюсь вникать в тот ужас, с которого эта тема началась.

Лично я освоил Powershell за несколько месяцев, прочитав книжку "Learn Windows PowerShell in a Month of Lunches", а потом выборочно - "PowerShell in Depth". Причём, никакого опыта программирования у меня не было - до этого я писал элементарнейшие скрипты CMD. То, что пишет в CMD, например, Megaloman, я не понимаю и сейчас.

Если не читаете на английском, есть куча русских источников, в этой ветке есть прикреплённая тема "Справочный материал Powershell".

Было бы желание, ну и читать надо последовательно и с начала, чтобы в голове складывалась какая-то система и понимание, что к чему.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 21:30, 04-06-2020 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
Тогда дату добавить что ли.. »
Да. ДатаВремя-Домен-Имя машины — набор полей для ключа таблицы.

DJ Mogarych, не, на русском нихрена до сих пор ничего вменяемого нет. Увы.

Но проблема и в том, что даже на английском нет даже вменяемой документации (читать блоги разработчиков, это, конечно, занимательно и пользительно, но не заменяет наличия полноценной документации). Всё дёргано, разнородно, здесь работает-здесь не работает, и требует обязательной проверки и опробования на практике.

Отправлено: 23:40, 04-06-2020 | #32


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Кто ищет - тот всегда найдёт.
А насчёт разнородности и проверок - это как у любого развивающегося языка, а особенно, которому надо поддерживать всякую совместимость со старыми технологиями.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 10:43, 05-06-2020 | #33


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Кто ищет - тот всегда найдёт. »
DJ Mogarych, ну, ежели что-нибудь за последние пару-тройку лет здесь изменилось — расскажите об этом в прикреплённых темах.

Цитата DJ Mogarych:
А насчёт разнородности и проверок - это как у любого развивающегося языка, а особенно, которому надо поддерживать всякую совместимость со старыми технологиями. »
Аааааа… Проблема в том, что его создатели действовали аналогично коллеге Griboed0ff — не продумав ни стройной системы, ни общих принципов, ни концепции развития.

Отправлено: 05:45, 06-06-2020 | #34



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - соединить три скрипта общим выводом.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Router - Как соединить три компьютера на один модем (ZTE ZXDSL-831CII) AzaTur Сетевое оборудование 4 11-03-2015 00:56
Route/Bridge - [решено] Три выхода в интернет, три офиса с общей локальной сетью Senja Сетевые технологии 14 15-12-2014 17:21
Загрузка - [решено] Восстановление загрузки - три HDD, три ОС Vitalijs Microsoft Windows 7 19 30-04-2010 01:10
[решено] Авторизация из скрипта для доступа к общим папкам на внешнем сервере 0bject Microsoft Windows NT/2000/2003 4 01-11-2005 09:30
Мона соединить три модема для игры? Liven Хочу все знать 4 17-08-2002 01:05




 
Переход