Ik heb hier een monopolie op PS-related threads blijkbaar. 
Que?
Ik heb een probleem én een oplossing, maar geen flauw benul hoe er aan te beginnen
Er komen namelijk een hoop OSen en technologieën bij te zien.
Momenteel heb ik een (zeer lang) script dat erg vereenvoudigd het volgende doet:
01) Enumereer logfiles van ePO agent installs
02) Filter die logfiles op gefaalde ePO agent installs
03) Run een SQL task op een ePO 3.6 server
04) Run een SQL task op een ePO 4.5 server
05) Converteer de output van 2, 3 en 4 in een CVS met dezelfde formatting
06) Haal de dubbels er uit volgens welbepaalde regels
07) Rapporteer een CVS met totalen
08) Rapporteer een CVS met details
09) Analyseer 8 op type probleem
10) Los de problemen op (allegaartje van logonscripts, VBS en psexec)
Héhé, dat is heel wat. En het werkt dan nog ook.
Maar...
Van de data die uit 1) komt heb ik te weinig informatie. Waar ik vanuit de 2 ePOs uitstekende data heb (oa. hostname, IP, domain, last communication, agent, OS, SP, DAT, ...) kan ik uit de logfiles van de mislukte agent-installs enkel de hostname krijgen. Meer informatie over de host zit er namelijk niet in. Aangezien wij een 50 tal domeinen hebben en honderden domeinnamen (helaas, dit is geen overdrijving) kan ik stap 10 niet uitvoeren op die machines aangezien ik ze niet kan bereiken. Immers: een host "YELLOW" kan zowel YELLOW.A.B, YELLOW.C.D, YELLOW.A.B.C.D.E, en nog enkele honderden andere mogelijkheden zijn.
Jamaar, wijzig dan het lokale script dat de logfiles aanmaakt zodat je wél hun IP en/of domain kent? Helaas: die oplossing is nog moeilijker dan het probleem zelf. Dan moet ik niet enkel toegang verkrijgen (dmv. een lijst met +/- 40 verschillende credentials
) tot mijn 3000 probleemgevallen maar tot de 20 000+ computers die we beheren plus hopen de ze online zijn (je denk toch niet dat wij WoL hebben?).
Er is een redder in nood (behoudens eventueel dubbel voorkomende namen) en het is niet een van onze totaal onbetrouwbare DNSen maar wel, voor wie het kent, netdisco.Manueel kan ik met netdisco in 99% van de gevallen de gegevens die ik wil te weten komen. Alleen: ik kan dit niet manueel doen voor de +/- 1000 hostnames waar ik deze informatie nodig heb.
tl;dr
Kortom: ik zoek een manier om via PowerShell queries in netdisco te doen en het resultaat terug op te vangen. De achterliggende DB is PostgreSQL op een BSD-machine en ik heb niet het flauwste vermoeden hoe dat te benaderen. Tips, hints, raad... het is allemaal welkom zolang het niet "zoek een andere werkgever" of "verander heel jullie informaticapark" (wat we overigens aan het doen zijn, maar dat duurt wel nog een jaar of 4) inhoudt
Edit
Volgende script doet bijna alles. wget struikelt alleen nog over de authenticatie. De klassieke http://user:pass@netdisco.bla.com werkt niet. Misschien moet ik morgen aan de slag met de cookie-opties van wget, aangezien dat de sleutel is tot de authenticatie.
Que?
Ik heb een probleem én een oplossing, maar geen flauw benul hoe er aan te beginnen
Momenteel heb ik een (zeer lang) script dat erg vereenvoudigd het volgende doet:
01) Enumereer logfiles van ePO agent installs
02) Filter die logfiles op gefaalde ePO agent installs
03) Run een SQL task op een ePO 3.6 server
04) Run een SQL task op een ePO 4.5 server
05) Converteer de output van 2, 3 en 4 in een CVS met dezelfde formatting
06) Haal de dubbels er uit volgens welbepaalde regels
07) Rapporteer een CVS met totalen
08) Rapporteer een CVS met details
09) Analyseer 8 op type probleem
10) Los de problemen op (allegaartje van logonscripts, VBS en psexec)
Héhé, dat is heel wat. En het werkt dan nog ook.
Maar...
Van de data die uit 1) komt heb ik te weinig informatie. Waar ik vanuit de 2 ePOs uitstekende data heb (oa. hostname, IP, domain, last communication, agent, OS, SP, DAT, ...) kan ik uit de logfiles van de mislukte agent-installs enkel de hostname krijgen. Meer informatie over de host zit er namelijk niet in. Aangezien wij een 50 tal domeinen hebben en honderden domeinnamen (helaas, dit is geen overdrijving) kan ik stap 10 niet uitvoeren op die machines aangezien ik ze niet kan bereiken. Immers: een host "YELLOW" kan zowel YELLOW.A.B, YELLOW.C.D, YELLOW.A.B.C.D.E, en nog enkele honderden andere mogelijkheden zijn.
Jamaar, wijzig dan het lokale script dat de logfiles aanmaakt zodat je wél hun IP en/of domain kent? Helaas: die oplossing is nog moeilijker dan het probleem zelf. Dan moet ik niet enkel toegang verkrijgen (dmv. een lijst met +/- 40 verschillende credentials
Er is een redder in nood (behoudens eventueel dubbel voorkomende namen) en het is niet een van onze totaal onbetrouwbare DNSen maar wel, voor wie het kent, netdisco.Manueel kan ik met netdisco in 99% van de gevallen de gegevens die ik wil te weten komen. Alleen: ik kan dit niet manueel doen voor de +/- 1000 hostnames waar ik deze informatie nodig heb.
tl;dr
Kortom: ik zoek een manier om via PowerShell queries in netdisco te doen en het resultaat terug op te vangen. De achterliggende DB is PostgreSQL op een BSD-machine en ik heb niet het flauwste vermoeden hoe dat te benaderen. Tips, hints, raad... het is allemaal welkom zolang het niet "zoek een andere werkgever" of "verander heel jullie informaticapark" (wat we overigens aan het doen zijn, maar dat duurt wel nog een jaar of 4) inhoudt
offtopic:
Ik blijf er twijfels bij hebben dat PS en VBS niet in de Devschuur thuishoren
Ik blijf er twijfels bij hebben dat PS en VBS niet in de Devschuur thuishoren
Edit
Volgende script doet bijna alles. wget struikelt alleen nog over de authenticatie. De klassieke http://user:pass@netdisco.bla.com werkt niet. Misschien moet ik morgen aan de slag met de cookie-opties van wget, aangezien dat de sleutel is tot de authenticatie.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| $hostname = "TESTPC" #Dit is uiteraard enkel voor het testen. In het echte script wordt dit aangeleverd.
$tmp= "Get-NetdiscoData.tmp"
$url = "http://netdisco.bla.com/netdisco/node.html?node=$hostname"
Function Clean-Up()
{
Remove-Item -Path $tmp
Clear-Variable -Name $hostname
Clear-Variable -Name $tmp
Clear-Variable -Name $url
Clear-Variable -Name $domain
Clear-Variable -Name $ipaddress
Clear-Variable -Name $lastcontact #Niet geïmplementeerd, maar kan ook handig zijn.
}
Function Get-NetdiscoData()
{
$url
./wget $url -O $tmp
}
Function Filter-NetdiscoData()
{
$domain = Select-String -Path $tmp -Pattern "\.html\?domain=(.)*\&\;"
$domain = $domain -Replace "(.)*domain\=",""
$domain = $domain -Replace "\&\;(.)*",""
$ipaddress = Select-String -Path $tmp -Pattern "node\=\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
$ipaddress = $ipaddress -Replace "(.)*node\=",""
$ipaddress = $ipaddress -Replace "(.)\>(.)*",""
$lastcontact = Select-String -Path $tmp -Pattern "" #Idem
$lastcontact = $ipaddress -Replace "","" #Idem
$lastcontact = $ipaddress -Replace "","" #Idem
$script:domain = $domain
$script:ipaddress = $ipaddress[0]
$script:lastcontact = $lastcontact #Idem
}
Get-NetdiscoData
Filter-NetdiscoData
$domain #Output naar shell pro info. In het echte script wordt dit in de bestaande array gestored als property van het $hostname object.
$ipaddress #Idem
$lastcontact #Idem
Clean-Up |
[ Voor 27% gewijzigd door YellowOnline op 23-09-2010 00:56 ]