Griboed0ff
03-06-2020, 11:26
не знаю как, но проблема с заполнением полей сама ушла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|V RN_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.*.*.*; Начинаю думать как теперь по хитрецки записывать ответы в таблицу (или уже базу создать), надо сделать как-то чтобы дубли не писал. Перед записью проверить наличие записываемой инфомации о пк в файле, если ее там нет то записать, если она изменилась то записать новую удалив старую, если уже есть и актуальная то пропустить. Есть мысли в какую сторону подумать?
[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|V RN_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.*.*.*; Начинаю думать как теперь по хитрецки записывать ответы в таблицу (или уже базу создать), надо сделать как-то чтобы дубли не писал. Перед записью проверить наличие записываемой инфомации о пк в файле, если ее там нет то записать, если она изменилась то записать новую удалив старую, если уже есть и актуальная то пропустить. Есть мысли в какую сторону подумать?