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

Компьютерный форум 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

 

Старожил


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

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


не знаю как, но проблема с заполнением полей сама ушла
Итого:
Код: Выделить весь код
Param( #powershell 
	[string]$Region,
#[parameter(Mandatory=$true)]
    [String]$a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""}) ,
	[string]$outfile = "D:\PowerShell\франкин\test\all_$a.csv"
    
	)
$myscripname=$myInvocation.ScriptName
 if ($Region -eq "MSK_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=MSK,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "MSK_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=MSK,DC=tsretail,DC=ru" 
	} elseif ($Region -eq  "VLK_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=VLK,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "VLK_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=VLK,OU=Regions,DC=tsretail,DC=ru"		
    } elseif ($Region -eq  "SMR_TT") {
        $OU =  "OU=Workstations,OU=TT,OU=Computers,OU=SMR,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "SMR_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=SMR,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "UFA_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=UFA,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "UFA_S") {
        $OU = "OU=1C-servers,OU=TT,OU=Computers,OU=UFA,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "SPB_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=SPB,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "SPB_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=SPB,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "EKT_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=EKT,OU=Regions,DC=tsretail,DC=ru" 
	} elseif ($Region -eq  "EKT_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=EKT,OU=Regions,DC=tsretail,DC=ru" 
    } elseif ($Region -eq  "VRN_TT") { 
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=VRN,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "VRN_S") { 
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=VRN,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "RND_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=RND,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "RND_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=RND,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "NSK_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=NSK,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "NSK_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=NSK,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq "MSK_B") {
        $OU = "OU=MainOffice,OU=Computers,OU=MSK,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "VLK_B") {
        $OU = "OU=Office,OU=Computers,OU=VLK,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "SMR_B") {
        $OU =  "OU=Office,OU=Computers,OU=SMR,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "UFA_B") {
        $OU = "OU=Office,OU=Computers,OU=UFA,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "SPB_B") {
        $OU = "OU=Office,OU=Computers,OU=SPB,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "EKT_B") {
        $OU = "OU=Office,OU=Computers,OU=EKT,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "VRN_B") { 
        $OU = "OU=Office,OU=Computers,OU=VRN,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "RND_B") {
        $OU = "OU=Office,OU=Computers,OU=RND,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "NSK_B") {
        $OU = "OU=Office,OU=Computers,OU=NSK,OU=Regions,DC=tsretail,DC=ru"
     } Else {
	    Write-Host "Usage: powershell $myscripname <filename with SQL query> [VLK_TT|MSK_TT|SMR_TT|UFA_TT|SPB_TT|EKT_TT|VRN_TT|RND_TT|NSK_TT|VLK_B|MSK_B|SMR_B|UFA_B|SPB_B|EKT_B|VRN_B|RND_B|NSK_B]"  
	    exit
    } 

    $pcs2 = get-adcomputer -Filter {Enabled -eq 'True'} -Properties Name, whenCreated, CanonicalName, OperatingSystem, OperatingSystemServicePack, OperatingSystemVersion, LastLogonDate -SearchBase $OU | Select-Object Name, whenCreated, CanonicalName, LastLogonDate, OperatingSystem, OperatingSystemServicePack, OperatingSystemVersion
    $counter = $pcs2.count
    write-host "Прошлись по $Region. Получили $counter записей" -ForegroundColor Yellow
       
   $pcs2|% {
	$name = $_.name
	if ((Test-Connection -Cn $name -Count 1 -quiet -ErrorAction SilentlyContinue) -eq $False) {
		Write-host "$name;не пингуется" -ForegroundColor Yellow
		$forLog = $name+";"+"не пингуется"
        $ofs = ''
        [string]$Region2 = $Region[0..2]
        [string]$Region3 = $Region[4]
        $hash_object1 = [ordered] @{"on\off" = "no ping"; Region = $Region2; "B\S\TT" = $Region3; "PSComputerName" = $name; Manufacturer = " "; Model = " "; Serialnumber = " ";"IPv4" = " "; MACAddress = " "; name = " "; AdapterType = " "; Speed = " "; "Monitor 1" = " "; "Monitor SN 1" = " "; "Monitor 2" = " "; "Monitor SN 2" = " ";  } 
        $ps_object1 = [pscustomobject]$hash_object1
        $ps_object1 | export-csv $outfile -notype -enc utf8 -d ';' -append
		} else {
$ofs = ''
Write-host "$name пингуется, выполняем проверку" -ForegroundColor Green
$ip = gwmi -ComputerName $name Win32_NetworkAdapterConfiguration | foreach { $_.IPAddress } 
#$ipv4 = $ip.Split(",")[-1]
$ip1 = gwmi -ComputerName $name Win32_NetworkAdapterConfiguration |Where { $_.DefaultIPGateway}|foreach {$_.DefaultIPGateway}
$PSComputerName = Get-WmiObject -computername $name Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.PSComputerName}
$MACAddress = Get-WmiObject -computername $name Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.MACAddress} 
$namenet = Get-WmiObject -computername $name Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.name}
$AdapterType = Get-WmiObject -computername $name Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.AdapterType}
$Speed = Get-WmiObject -computername $name Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.Speed} 
$Manufacturer = Get-WmiObject -computername $name -ClassName Win32_ComputerSystem  |foreach {$_.Manufacturer}  
$Model = Get-WmiObject -computername $name -ClassName Win32_ComputerSystem  |foreach {$_.Model} 
$SN = Get-WmiObject -computername $name Win32_BaseBoard | foreach {$_.SerialNumber}        
$mm = [char[]]((gwmi wmimonitorid -Namespace root\wmi -ComputerName $name).UserFriendlyName)-join "" 
[string]$mmod1 = $mm[0..12]
[string]$mmod2 = $mm[13..26]
$msn = [char[]]((gwmi wmimonitorid -Namespace root\wmi -ComputerName $name).SerialNumberID)-join ""
[string]$msn1 = $msn[0..15]
[string]$msn2 = $msn[16..32]
[string]$Region4 = $Region[0..2]
[string]$Region5 = $Region[4]
$hash_object = [ordered] @{"on\off" = "ping"; Region = $Region4; "B\S\TT" = $Region5; "PSComputerName" = $PSComputerName; Manufacturer = $Manufacturer; Model = $Model; Serialnumber = $SN; "IPv4" = "$ipv4"; MACAddress = $MACAddress; name = $namenet; AdapterType = $AdapterType; Speed = $Speed; "Monitor 1" = $mmod1; "Monitor SN 1" = $msn1; "Monitor 2" = $mmod2; "Monitor SN 2" = $msn2;  } 
$ps_object = [pscustomobject]$hash_object
$ps_object | export-csv $outfile -notype -enc utf8 -d ';' -append
}}
результат
Код: Выделить весь код
"on\off";"Region";"B\S\TT";"PSComputerName";"Manufacturer";"Model";"Serialnumber";"IPv4";"MACAddress";"name";"AdapterType";"Speed";"Monitor 1";"Monitor SN 1";"Monitor 2";"Monitor SN 2"
"ping";"ekt";"s";"6-SERVER";"Hewlett-Packard";"HP ProDesk 400 G2 MT";"CZC4483YKL";"";"A0:D3:C1:4D:52:C1";"Realtek PCIe GBE Family Controller #4";"Ethernet 802.3";"1000000000";"";"";"";""
"ping";"ekt";"b";"PC-PANOV";"KRAFTWAY";"GEG";"                      ";"";"D0:27:88:72:3F:98";"Realtek PCIe GBE Family Controller";"Ethernet 802.3";"100000000";"HP E231      ";"3CQ3470WJF      ";"HP E231      ";"3CQ4070QH5      "
"no ping";"ekt";"b";"PC-CHIOV";" ";" ";" ";" ";" ";" ";" ";" ";" ";" ";" ";" "
"ping";"ekt";"b";"PC-BYCHA";"Hewlett-Packard";"HP ProDesk 400 G2 MT";"CZC44846ZW";"";"A0:D3:C1:4E:85:E8";"Realtek PCIe GBE Family Controller #4";"Ethernet 802.3";"100000000";"HP W2072a    ";"CNC238PNJN      ";"";""
"ping";"ekt";"t";"008-5";"Hewlett-Packard";"HP ProDesk 400 G1 SFF";"CZC4483ZWL";"";"64:51:06:3B:4A:8D";"Realtek PCIe GBE Family Controller #3";"Ethernet 802.3";"1000000000";"HP W2072a    ";"CNC435PJ5D      ";"";""
проблема еще в том, что теперь скрипт на сильно удаленных пк довольно медленно работает. И траблы с получением ipv4, нужно выловить только с активной карты и только тот адрес, который начинается с 10.*.*.*; Начинаю думать как теперь по хитрецки записывать ответы в таблицу (или уже базу создать), надо сделать как-то чтобы дубли не писал. Перед записью проверить наличие записываемой инфомации о пк в файле, если ее там нет то записать, если она изменилась то записать новую удалив старую, если уже есть и актуальная то пропустить. Есть мысли в какую сторону подумать?

Последний раз редактировалось Griboed0ff, 03-06-2020 в 12:28.


Отправлено: 11:26, 03-06-2020 | #21



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

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


Ветеран


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

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


Цитата Griboed0ff:
…(или уже базу создать), надо сделать как-то чтобы дубли не писал. »
Вы плавно движетесь в правильном направлении.

Цитата Griboed0ff:
то записать новую удалив старую, »
А не надо «удалять старую». Совсем не надо.

Отправлено: 20:06, 03-06-2020 | #22


Старожил


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

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


Цитата Iska:
А не надо «удалять старую». Совсем не надо. »
Почему не удалять? Оставить для истории изменений? Тогда дату добавить что ли.. Можете подсказать как можно ускорить выполнение скрипта? А то выполняется очень медленно. Мб как-то делать меньше запросов в один и тот же класс, а потом уже вычленять нужное в переменные? Но как ума не приложу. Я уже пробовал запараллелить через кор, но там проблемы с Get-WmiObject, gwmi и модулем AD, на Get-Ciminstance 90% компов ответили ошибками.

Отправлено: 20:48, 03-06-2020 | #23


Аватара для Fors1k

Старожил


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

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


Цитата Griboed0ff:
записывает прошлое значение если нет мониторов

Monitor9 HP E231 [3CQ4070X4Z]
Monitor10 HP E231 [6CM4221RHC] »
А Вас номера мониторов совсем не смущают?))
Если планируете запускать скрипт много раз в одной сессии, то замените первую строку на Param($rv=(rv * -ea 0), .

Отправлено: 21:02, 03-06-2020 | #24


Старожил


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

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


Цитата Fors1k_m:
А Вас номера мониторов совсем не смущают?)) »
Да вот как раз номера то и смутили. Я просто не понимаю возможно как вашим кодом пользоваться. Сделал так
Код: Выделить весь код
Param($rv=(rv * -ea 0),
    $a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""}) ,
    $outfile = "E:\video\1111.csv",
    $pp = "10.10.10.7"
)cls

$PSComputerName = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.PSComputerName}
$MACAddress = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.MACAddress} 
$namenet = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.name}
$AdapterType = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.AdapterType}
$Speed = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.Speed} 
$Manufacturer = Get-WmiObject -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Manufacturer}  
$Model = Get-WmiObject -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Model} 
$SN = Get-WmiObject -computername $pp Win32_BaseBoard | foreach {$_.SerialNumber}        

$hash_object = [ordered] @{PSComputerName = "$PSComputerName"; Manufacturer = "$Manufacturer"; Model = "$Model"; Serialnumber = "$SN"; MACAddress = "$MACAddress"; name = "$namenet"; AdapterType = "$AdapterType"; Speed = "$Speed";  } 
gwmi -ea 0 wmimonitorid -Namespace root\wmi|%{$hash_object.add("Monitor"+ ++$i,(($_.UserFriendlyName|?{($_ -ne 0)}|%{[char]$_}) -join "")+' ['+(($_.SerialNumberID|?{($_ -ne 0)}|%{[char]$_}) -join "")+']')}

$ps_object = [pscustomobject]$hash_object
$ps_object | export-csv $outfile -notype -enc utf8 -d ';' -append
вывод получился такой:
Код: Выделить весь код
"PSComputerName";"Manufacturer";"Model";"Serialnumber";"MACAddress";"name";"AdapterType";"Speed";"Monitor11"
"DESKTOP-84S5RK8 DESKTOP-84S5RK8 DESKTOP-84S5RK8 DESKTOP-84S5RK8 DESKTOP-84S5RK8 DESKTOP-84S5RK8 DESKTOP-84S5RK8";"Gigabyte Technology Co., Ltd.";"To be filled by O.E.M.";"To be filled by O.E.M.";"74:D4:35:08:86:7C      ";"Realtek PCIe GbE Family Controller VirtualBox Host-Only Ethernet Adapter VirtualBox Host-Only Ethernet Adapter VirtualBox Host-Only Ethernet Adapter VirtualBox Host-Only Ethernet Adapter VirtualBox Host-Only Ethernet Adapter VirtualBox Host-Only Ethernet Adapter";"Ethernet 802.3      ";"100000000      ";"HP W2072a [CNC401NT3L]"
И еще из-за того, что имя столбца всегда разное export-csv не может записать инфу файл больше одного раза получается ошибка:
Код: Выделить весь код
export-csv : Не удается присоединить содержимое CSV к следующему файлу: E:\video\1111.csv. У присоединяемого объекта отсутствует свойство, соответствующее сл
едующему столбцу: Monitor11. Чтобы продолжить работу при наличии несоответствий свойств, добавьте параметр -Force и выполните команду снова.
строка:20 знак:14
+ $ps_object | export-csv $outfile -notype -enc utf8 -d ';' -append
+              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Monitor11:String) [Export-Csv], InvalidOperationException
    + FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell.Commands.ExportCsvCommand
Так же модель и серийник записываются в одну ячейку, а не в две. Надеюсь я просто не понимаю как правильно вывести результат..

Отправлено: 23:41, 03-06-2020 | #25


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

fascinating rhythm


Moderator


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

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


Цитата Griboed0ff:
$PSComputerName = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.PSComputerName}
$MACAddress = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.MACAddress}
$namenet = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.name}
$AdapterType = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.AdapterType}
$Speed = Get-WmiObject -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |foreach {$_.Speed}
$Manufacturer = Get-WmiObject -computername $pp -ClassName Win32_ComputerSystem |foreach {$_.Manufacturer}
$Model = Get-WmiObject -computername $pp -ClassName Win32_ComputerSystem |foreach {$_.Model}
$SN = Get-WmiObject -computername $pp Win32_BaseBoard | foreach {$_.SerialNumber} »
Зачем сто раз запрашивать одно и то же? Достаточно сделать один запрос, а потом получить данные.
И зачем там foreach?
Код: Выделить весь код
$adapter = gwmi -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0"

$adapter.macaddress
$adapter.AdapterType
$adapter.speed
Вообще, прежде чем браться за подобные монструозные проекты, желательно поизучать то, на чём вы это всё пытаетесь реализовать, иначе так и будете пытаться составить лоскутное одеяло из разнородных скриптов, написанных разными людьми по-разному, и создавать километровые темы.

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


Отправлено: 10:38, 04-06-2020 | #26


Ветеран


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

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


Цитата DJ Mogarych:
прежде чем браться за подобные монструозные проекты, желательно поизучать то, на чём вы это всё пытаетесь реализовать »
зачем? - предприятие деньги на инвентаризации сэкономило, offer выполнен, премия получена
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:44, 04-06-2020 | #27


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

fascinating rhythm


Moderator


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

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


Ну получена и получена, мне-то всё равно. Я о другом. Всё равно работает-то через одно место это детище Франкенштейна.
И улучшать его, лезть и разбираться уже не хочется, видя отношение ТС к процессу и нежелание нормально разобраться с написанием скриптов самому.
А ведь с момента первых сообщений по этой теме прошло уже немало времени.

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:42, 04-06-2020 | #28


Старожил


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

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


Цитата DJ Mogarych:
нежелание нормально разобраться с написанием скриптов самому »
Сначала начальника хотел просто разовую выгрузку с небольшого количества пк, для чего и был сделан мелкий скрипт. Позже надо стало больше компов, потом вообще все регионы. Так же сначала надо было одни данные потом другие, но в целом количество данных растет. Я до этого форума вообще не знал что такое ps, по мере поступления задач\проблем погружаюсь в изучение PS. Не всем дается легко скриптописание когда ничего до этого не писал. Намного лучше получается если просто переделать чей-то скрипт. Хуже получается когда сам начинаю писать, получается невероятное громоздкое что-то. На форум надеюсь в плане подсказки. Потому что иногда не могу нагуглить что мне нужно, просто видимо не получается правильно сформировать запрос. Времени на от корки до корки пошик поучить нету, но задача есть и делать надо хоть как. Большинство этих франкенштейнчиков работает, их задача часто очень маленькая, даже если они работают через одно место.
Цитата DJ Mogarych:
улучшать его, лезть и разбираться уже не хочется »
но уже залезли и дали подсказку
Цитата DJ Mogarych:
Код: Выделить весь код
$adapter = gwmi -computername $pp Win32_NetworkAdapter -Filter "NetConnectionStatus>0"
$adapter.macaddress
$adapter.AdapterType
$adapter.speed
»
И этого уже достаточно, на этом спасибо!
Цитата Busla:
offer выполнен, премия получена »
Может кто-то и получил, меня просто не уволили.

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


Старожил


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

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


Цитата DJ Mogarych:
Зачем сто раз запрашивать одно и то же? Достаточно сделать один запрос, а потом получить данные. »
вот я ранее об и думал, но не знал как.
Цитата Griboed0ff:
Мб как-то делать меньше запросов в один и тот же класс, а потом уже вычленять нужное в переменные? »

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



Компьютерный форум 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




 
Переход