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

Компьютерный форум 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]$outfile = 'D:\PowerShell\франкин\test\model.csv',
    [string]$outfile2 = 'D:\PowerShell\франкин\test\mac.csv',
    [string]$outfile3 = 'D:\PowerShell\франкин\test\mon.csv',
    [string]$outfile4 = 'D:\PowerShell\франкин\test\no_ping.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
    } 

    $logdate = $((get-date).tostring("ddMMyy HH_mm"))
    $log = $outfile4
    $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 "Прошлись по $OU. Получили $counter записей" -ForegroundColor Yellow
    "Имя ПК;OperatingSystem;доступность;результат проверки;LastLogonDate;CanonicalName;" #| Out-File $log -Append -Encoding utf8
    
   $pcs2|% {
	$Res = @()
	$forLog = @()
	$name = $_.name
	$logon = $_.LastLogonDate.tostring("dd.MM.yyyy")
	write-host $name -ForegroundColor Green
	if ((Test-Connection -Cn $name -Count 1 -quiet -ErrorAction SilentlyContinue) -eq $False) {
		Write-host "$name;не пингуется"
		$forLog = $name+";"+$_.OperatingSystem+";"+"не пингуется;"+";$logon"+";"+$_.CanonicalName
		$forLog | Out-File $log -Append -Encoding utf8
	} else {
		Write-host "$name пингуется, выполняем проверку"
		Get-CimInstance -ClassName Win32_ComputerSystem -computername $name | convertto-csv -d ';' -notype| Out-File $outfile -enc utf8 -Append
        Get-WmiObject Win32_NetworkAdapter -Filter 'AdapterTypeId = 0 and MACAddress is not null' -computername $name | convertto-csv -d ';' -notype| Out-File $outfile2 -enc utf8 -Append
        $ofs = ''
		gwmi wmimonitorid -Namespace root\wmi -ComputerName $name |
		Select @{n='UserFriendlyName';e={([string][Char[]]$_.UserFriendlyName).SubString(0,$_.UserFriendlyNameLength)}}, @{n='SerialNumberID';e={[string][Char[]]$_.SerialNumberID}} |%{
			[pscustomobject]@{
				'Name' = $name
				'UserFriendlyName' = $_.UserFriendlyName.trim([char]0x0000)
				'SerialNumberID' = $_.SerialNumberID.trim([char]0x0000)
			} | Out-File $outfile3 -enc utf8 -Append
			}
		} }
собирает с аушек ад имена компов и опрашивает информацию о фирме модели пк, мак адресе, модель и серийник мониторов. Проблема в том, что я пробовал обьединять вывод в один файл, но получается неворятнейшая каша из почти необрабатываемой инфы. Я стремлюсь записать всю инфу полученную от пк в одну строку. Пример как хотелось бы:
Код: Выделить весь код
ekt_tt;d909-2;Hewlett-Packard;HP ProDesk 400 G1 SFF;64:51:06:3B:4A:8D;HP W2072a;CNC435PJ5D;HP E231;3CQ3470WJF;
если второго монитора нет то просто записать какой-нибудь символ или слово в столбец. Но проблема еще в том, что запрос мака и производителя возвращает множество значений (ван порты, модемы и пр.), хотя та же команда выполеная локально выдает мне одну сетевую карту. Нужна именно встроенная проводная карта. Или хотя записать всю инфу оп пк в одну строку, возможно дальше буду как-то парсить инфу.

Последний раз редактировалось Griboed0ff, 28-05-2020 в 11:55.


Отправлено: 11:41, 28-05-2020 | #11



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

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


Ветеран


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

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


Цитата Griboed0ff:
новая проблема, накидан »
Griboed0ff, проблема одна — Вы ринулись в бой, не продумав стройной системы сбора. Поэтому Вы парсите, собираете в строку, потом опять парсите, потом опять собирате — и так по кругу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:15, 29-05-2020 | #12


Старожил


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

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


Цитата Iska:
Вы ринулись в бой, не продумав стройной системы сбора. »
вы абсолютно правы, но дело не в том, что я не хочу этого делать, дело в том, что не могу из-за отсутствия знаний в PS, а делать уже надо. Я начал изучать ps, но пока мало знаю. С последнего сообщения переделал скрипт и получил часть того чего хотел.
ремикс
Код: Выделить весь код
 Param(
    [String]$a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""}) ,
	[string]$outfile = "D:\PowerShell\франкин\test\1111.csv",
    $pp = "05server"
    	)

$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-CimInstance -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Manufacturer}  
$Model = Get-CimInstance -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;  } 
$ps_object = [pscustomobject]$hash_object
$ps_object | export-csv $outfile -notype -enc utf8 -d ';' -append
резуьлтат
Код: Выделить весь код
"PSComputerName";"Manufacturer";"Model";"Serialnumber";"MACAddress";"name";"AdapterType";"Speed"
"05server";"Hewlett-Packard";"HP ProDesk 400 G2 MT";"CZC44843RP";"A0:D3:C1:4D:6B:CE";"Realtek PCIe GBE Family Controller #4";"Ethernet 802.3";"1000000000"
как всегда есть проблема, не могу допереть умом как в это все еще добавить инфу о мониторах, в соседней теме подсказали как получить инфу
Код: Выделить весь код
$m = gwmi wmimonitorid -Namespace root\wmi
[string][char[]] ($m.UserFriendlyName) -join ""
[string][char[]] ($m.SerialNumberID) -join ""
результат
Код: Выделить весь код
HP E231      HP E231      
3CQ4070X4Z      6CM4221RHC
не могу понять как из этого вычленить сначала первый монитор, а потом второй и записать в одну строку подобно остальной инфе. И как заполнить пустые столбики чем-либо если конфигурация одним монитором.

А точнее, лучше не вычленять из результата, а сразу писать результат как надо.

Отправлено: 15:35, 02-06-2020 | #13


Ветеран


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

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


В данном случае Вы получаете массив из двух значений.

Отправлено: 19:56, 02-06-2020 | #14


Старожил


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

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


Цитата Iska:
В данном случае Вы получаете массив из двух значений. »
похоже что нет (рассматриваю пока модель), если выполняю
Код: Выделить весь код
$a = ((gwmi wmimonitorid -Namespace root\wmi -ComputerName t-pc-nori).UserFriendlyName) 
$a
получаю
Код: Выделить весь код
72
80
32
69
50
51
49
0
0
0
0
0
0
76
71
32
73
80
83
32
70
85
76
76
72
68
я попробовал выловить то что нужно через
Код: Выделить весь код
[string]$b = $a[0..7]
работает корректно до того момента как модель с другим названием имеет другие числа для фильтрации. Есть ли способ выловить именно первое значение (модель первого монитора) или второе для записи в переменную. Или вообще не правильно вас понял?

хм, заметил, что всегда возвращает 26 значений независимо от моделей, по идее можно делать по 13 на каждое значение, далее уже в тексте обрезать лишние пробелы.
Код: Выделить весь код
72
80
32
69
50
51
49
0
0
0
0
0
0
72
80
32
69
50
51
49
0
0
0
0
0
0

Последний раз редактировалось Griboed0ff, 02-06-2020 в 21:48.


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


Старожил


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

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


в общем что-то получилось
Скрытый текст
Код: Выделить весь код
$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-CimInstance -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Manufacturer}  
$Model = Get-CimInstance -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Model} 
$SN = Get-WmiObject -computername $pp Win32_BaseBoard | foreach {$_.SerialNumber}        
$mm = [char[]]((gwmi wmimonitorid -Namespace root\wmi -ComputerName $pp).UserFriendlyName)-join "" 
[string]$mmod1 = $mm[0..12]
[string]$mmod2 = $mm[13..26]
$msn = [char[]]((gwmi wmimonitorid -Namespace root\wmi -ComputerName $pp).SerialNumberID)-join ""
[string]$msn1 = $msn[0..15]
[string]$msn2 = $msn[16..32]
$hash_object = [ordered] @{PSComputerName = $PSComputerName; Manufacturer = $Manufacturer; Model = $Model; Serialnumber = $SN; MACAddress = $MACAddress; name = $namenet; AdapterType = $AdapterType; Speed = $Speed; "Monitor 1" = $mmod1; "SN 1" = $msn1; "Monitor 2" = $mmod2; "SN 2" = $msn2;  } 
$ps_object = [pscustomobject]$hash_object
$ps_object | export-csv $outfile -notype -enc utf8 -d ';' -append
но есть проблема. Если мониторов вообще нет то записываются предыдущие данные. Как оставить поле пустым или его заполнить например "-"?!
Скрытый текст
Код: Выделить весь код
"PSComputerName";"Manufacturer";"Model";"Serialnumber";"MACAddress";"name";"AdapterType";"Speed";"Monitor 1";"SN 1";"Monitor 2";"SN 2"
"E";"Hewlett-Packard";"HP ProDesk 400 G2 MT";"CZC4483YK7";"A0:D3:C1:4D:51:2D";"Realtek PCIe GBE Family Controller";"Ethernet 802.3";"100000000";"HP E231      ";"3CQ3510L75      ";"HP E231      ";"CNC238NS0G      "
"05-SERVER";"Hewlett-Packard";"HP ProDesk 400 G2 MT";"CZC44843RP";"A0:D3:C1:4D:6B:CE";"Realtek PCIe GBE Family Controller #4";"Ethernet 802.3";"1000000000";"";"3CQ3510L75      ";"";"CNC238NS0G      "
"05-SERVER";"Hewlett-Packard";"HP ProDesk 400 G2 MT";"CZC44843RP";"A0:D3:C1:4D:6B:CE";"Realtek PCIe GBE Family Controller #4";"Ethernet 802.3";"1000000000";"";"3CQ3510L75      ";"";"CNC238NS0G      "
"TT-PC-AV";"Dell Inc.";"OptiPlex 5050";"/C7JLBS2/CNFCW0087V029Y/";"54:BF:64:7E:FE:E3";"Intel(R) Ethernet Connection (5) I219-V";"Ethernet 802.3";"100000000";"HP E243      ";"CNK91733GB      ";"";""


ну и как то избавиться от красноты, так где нет мониторов вообще такие вот ошибки:
Скрытый текст
Код: Выделить весь код
gwmi : Не поддерживается 
D:\PowerShell\test\3.ps1:15 знак:17
+ ... = [char[]]((gwmi wmimonitorid -Namespace root\wmi -ComputerName $pp). ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
 
gwmi : Не поддерживается 
D:\PowerShell\test\3.ps1:18 знак:18
+ ... = [char[]]((gwmi wmimonitorid -Namespace root\wmi -ComputerName $pp). ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
 
Не удается индексировать в массив NULL.
D:\PowerShell\test\3.ps1:19 знак:1
+ [string]$msn1 = $msn[0..15]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Не удается индексировать в массив NULL.
D:\PowerShell\test\3.ps1:20 знак:1
+ [string]$msn2 = $msn[16..32]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Последний раз редактировалось Griboed0ff, 02-06-2020 в 23:00.


Отправлено: 22:54, 02-06-2020 | #16


Старожил


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

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


еще многие компы ответили так
Скрытый текст
Код: Выделить весь код
Get-CimInstance : Службе WS-Management не удается обработать запрос. URI ресурса DMTF был использован для доступа к классу, отличному от DMTF. Повторите попытку с использованием URI ресурса, отличного от DMTF.
D:\PowerShell\франкин\test\test.ps1:93 знак:17
+ ... ufacturer = Get-CimInstance -computername $name -ClassName Win32_Comp ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (root\cimv2:Win32_ComputerSystem:String) [Get-CimInstance], CimException
    + FullyQualifiedErrorId : HRESULT 0x80338139,Microsoft.Management.Infrastructure.CimCmdlets.GetCimInstanceCommand
    + PSComputerName        : EKT-PC-KISELEVA
 
Get-CimInstance : Службе WS-Management не удается обработать запрос. URI ресурса DMTF был использован для доступа к классу, отличному от DMTF. Повторите попытку с использованием URI ресурса, отличного от DMTF.
D:\PowerShell\франкин\test\test.ps1:94 знак:10
+ $Model = Get-CimInstance -computername $name -ClassName Win32_Compute ...
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (root\cimv2:Win32_ComputerSystem:String) [Get-CimInstance], CimException
    + FullyQualifiedErrorId : HRESULT 0x80338139,Microsoft.Management.Infrastructure.CimCmdlets.GetCimInstanceCommand
    + PSComputerName        : EKT-PC-KISELEVA
не правильно запрашиваю производителя и модель?

Отправлено: 23:29, 02-06-2020 | #17


Старожил


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

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


Цитата Griboed0ff:
не правильно запрашиваю производителя и модель? »
заменил Get-CimInstance на Get-WmiObject работает. Осталось только
Цитата Griboed0ff:
но есть проблема. Если мониторов вообще нет то записываются предыдущие данные. Как оставить поле пустым или его заполнить например "-"?!
Скрытый текст
ну и как то избавиться от красноты, так где нет мониторов вообще такие вот ошибки:
Скрытый текст »

Отправлено: 23:46, 02-06-2020 | #18


Аватара для Fors1k

Старожил


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

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


Код: Выделить весь код
Param(
    $a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""}) ,
    $outfile = "D:\PowerShell\франкин\test\1111.csv",
    $pp = "localhost"
)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-CimInstance -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Manufacturer}  
$Model = Get-CimInstance -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 "")+']')}

$hash_object

Отправлено: 01:45, 03-06-2020 | #19


Старожил


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

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


ваш код так же записывает прошлое значение если нет мониторов, например, 05-server не имеет мониторов, но однако записал результаты от прошлого запуска.
Код: Выделить весь код
Param(
    $a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""}) ,
    $outfile = "D:\PowerShell\франкин\test\1111.csv",
    $pp = "05-server"
)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-CimInstance -computername $pp -ClassName Win32_ComputerSystem  |foreach {$_.Manufacturer}  
$Model = Get-CimInstance -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 "")+']')}

$hash_object
Код: Выделить весь код
Name                           Value                                                                                                                                                                                 
----                           -----                                                                                                                                                                                 
PSComputerName                 05-SERVER                                                                                                                                                                           
Manufacturer                   Hewlett-Packard                                                                                                                                                                       
Model                          HP ProDesk 400 G2 MT                                                                                                                                                                  
Serialnumber                   CZC44843RP                                                                                                                                                                            
MACAddress                     A0:D3:C1:4D:6B:CE                                                                                                                                                                     
name                           Realtek PCIe GBE Family Controller #4                                                                                                                                                 
AdapterType                    Ethernet 802.3                                                                                                                                                                        
Speed                          1000000000                                                                                                                                                                            
Monitor9                       HP E231 [3CQ4070X4Z]                                                                                                                                                                  
Monitor10                      HP E231 [6CM4221RHC]
А вывод в файл через
Код: Выделить весь код
$hash_object | export-csv $outfile -notype -enc utf8 -d ';' -append
Выдал результат видимо свойства
Код: Выделить весь код
"Count";"IsReadOnly";"Keys";"Values";"IsFixedSize";"SyncRoot";"IsSynchronized"
"10";"False";"System.Collections.Specialized.OrderedDictionary+OrderedDictionaryKeyValueCollection";"System.Collections.Specialized.OrderedDictionary+OrderedDictionaryKeyValueCollection";"False";"System.Object";"False"
"10";"False";"System.Collections.Specialized.OrderedDictionary+OrderedDictionaryKeyValueCollection";"System.Collections.Specialized.OrderedDictionary+OrderedDictionaryKeyValueCollection";"False";"System.Object";"False"

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


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



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




 
Переход