kaspersky
Goto Top

Powershell Bearbeiten der Ausgabe

Hi,
ich möchte mit meinem Skript auf unseren Infobloxx DNS Appliances DNS Einträge anlegen, aktulisieren, bzw löschen. Ich lese damit die bConnect Schnittstelle unseres Baramundiservers aus.

Die Ausgabe soll direkt eine bereits fertige API bedienen. Die Ausgabe gibt eine Liste mit PCnamen und IPadressen der aktiven Clients aus. Inaktive scheinen ohne IPadresse auf, diese sollen gelöscht werden.
Abfrage im Skript:

Initialize-bConnect -Server "baramundi-dev.domain.at" -Credentials $creds -Port 443 -AcceptSelfSignedCertifcate
Get-bConnectEndpoint | select Hostname, PrimaryIP | Out-String -stream | select-object -skip 3 > hosts

Die Ausgabe soll nach der Fertigstellung direkt an die API Schnittstelle ohne ein Textfile erfolgen. Hier die Ausgabe der Abfrage:

Win10-2009-MF XXX.244.21.98
HYPNOS XXX.244.113.197
H81200-002-D XXX.244.222.171
DEVPC-Urducea

Die Ausgabe soll dahingehend formattiert werden:
Ein Eintrag mit aktueller IPadresse soll in der Ausgabe wie folgt an die API übergeben werden, wobei es egal ist ob ein lehrzeichen oder ein TAB zwischen den drei Blöcken der Ausgabe steht:

set DNS entry Win10-2009-MF XXX.244.21.98

Die zu löschenden DNS Einträge sollen nur den PC Namen und davor "no IP" stehen haben.

no IP DEVPC-Urducea

Wie kann ich das mit dem bereits vorhandenem Skriptteil so umbauen, dass das funktioniert?
Vielen Dank.
LG, Bernhard

Content-ID: 595218

Url: https://administrator.de/contentid/595218

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

145033
Lösung 145033 11.08.2020, aktualisiert am 12.08.2020 um 09:16:04 Uhr
Goto Top
Get-bConnectEndpoint | %{
    If ($_.PrimaryIP -ne ''){  
        "set DNS entry $($_.Hostname) $($_.PrimaryIP)"  
    }else{
        "no IP $($_.Hostname)"  
    }
}
kaspersky
kaspersky 12.08.2020 aktualisiert um 07:37:13 Uhr
Goto Top
Vielen Dank, ich habe die Schleife eingebaut, allerdings funktioniert es so nicht. Möglicherweise habe ich was nicht so verstanden.


Initialize-bConnect -Server "baramundi-dev.boku-it-dev.boku.ac.at" -Credentials $creds -Port 443 -AcceptSelfSignedCertifcate
Get-bConnectEndpoint | select Hostname, PrimaryIP | Out-String -stream | select-object -skip 3 | %{
If ($_.PrimaryIP -ne ''}{
"set DNS entry $($_.Hostname) $($_.PrimaryIP)"
}else{
"no IP $($_.Hostname)"
}
} > hosts

Ergibt folgenden Fehleroutput:
PS C:\Users\Administrator.BOKU-IT-DEV\Desktop> .\bfinster.ps1
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:13 char:28

back-to-topIf ($_.PrimaryIP -ne ''}{

back-to-top~

Missing closing ')' after expression in 'If' statement.
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:18 char:1

back-to-top} > hosts

back-to-top~

Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (face-smile , ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisAfterStatement

Füge ich dieSchleife gleich nach dem Get-bConnectEndpoint ein bekomme ich folgenden Fehler:

PS C:\Users\Administrator.BOKU-IT-DEV\Desktop> .\bfinster.ps1
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:12 char:23

back-to-topGet-bConnectEndpoint | | %{

back-to-top~

An empty pipe element is not allowed.
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:13 char:28

back-to-topIf ($_.PrimaryIP -ne ''}{

back-to-top~

Missing closing ')' after expression in 'If' statement.
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:18 char:1

back-to-top} | Out-String -stream | select-object -skip 3 > hosts

back-to-top~

Unexpected token '}' in expression or statement.
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:18 char:3

back-to-top} | Out-String -stream | select-object -skip 3 > hosts

back-to-top~

An empty pipe element is not allowed.
+ CategoryInfo : ParserError: (face-smile , ParseException
+ FullyQualifiedErrorId : EmptyPipeElement

Wenn die Abfrage nur Ihre Abfrage verwende habe ich folgenden Fehler:

PS C:\Users\Administrator.BOKU-IT-DEV\Desktop> .\bfinster.ps1
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:13 char:28

back-to-topIf ($_.PrimaryIP -ne ''}{

back-to-top~

Missing closing ')' after expression in 'If' statement.
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:18 char:1

back-to-top}

back-to-top~

Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (face-smile , ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisAfterStatement

PS C:\Users\Administrator.BOKU-IT-DEV\Desktop>

Powershell ist kompliziert, in der Bash wäre das viel einfacher zu zerlegen.
Vielen Dank.
LG, Bernhard
145033
145033 12.08.2020 aktualisiert um 07:56:59 Uhr
Goto Top
Möglicherweise habe ich was nicht so verstanden.
Ja hast du. Meine Zeile ersetzt deine zweite Zeile oben komplett du kannst das nicht einfach so an deine eigene dran hängen, Powershell arbeitet objektorientiert also nutze es auch so 😉
kaspersky
kaspersky 12.08.2020 um 08:19:09 Uhr
Goto Top
Vielen Dank für die schnelle Antwort,

Initialize-bConnect -Server "baramundi-dev.boku-it-dev.boku.ac.at" -Credentials $creds -Port 443 -AcceptSelfSignedCertifcate
Get-bConnectEndpoint | %{
If ($_.PrimaryIP -ne ''}{
"set DNS entry $($_.Hostname) $($_.PrimaryIP)"
}else{
"no IP $($_.Hostname)"
}
}

Ich habe die Zeile eh so verwendet, allerdings funktioniert es nicht ganz:

At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:14 char:28

back-to-topIf ($_.PrimaryIP -ne ''}{

back-to-top~

Missing closing ')' after expression in 'If' statement.
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:19 char:1

back-to-top}

back-to-top~

Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (face-smile , ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisAfterStatement

Wenn ich die fehlende Klammer einsetze If ($_.PrimaryIP -ne '')}{ habe ich folgende Ausgabe:

At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:14 char:28

back-to-topIf ($_.PrimaryIP -ne '')}{

back-to-top~

Missing statement block after If ( condition ).
At C:\Users\Administrator.BOKU-IT-DEV\Desktop\bfinster.ps1:19 char:1

back-to-top}

back-to-top~

Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (face-smile , ParseException
+ FullyQualifiedErrorId : MissingStatementBlock

LG, Bernhard
145033
145033 12.08.2020 aktualisiert um 09:16:52 Uhr
Goto Top
Sorry Tippfehler, hatte ne geschweifte statt normale Klammer getippt, ist oben behoben.
kaspersky
kaspersky 12.08.2020 um 09:29:49 Uhr
Goto Top
Hi,
super jetzt klappt es prima, vielen Dank. Muss mir die Syntax der PS genauer anschauen. War mein erster Versuch.
LG, bernhard
kaspersky
kaspersky 12.08.2020 aktualisiert um 10:25:47 Uhr
Goto Top
Hallo Kleiber, eine Frage habe ich noch,

ich habe herausgefunden dass einige Maschinen VMs sind und eine private Adressirung aufweisen.
BARATESTVM2 192.168.171.128
JOSKRAVM2 192.168.171.129
BARAMUNDIVMPROD 192.168.171.130
PC3 10.0.2.15
ALEXANDER-VM 10.0.2.15
Diese werden in der Ausgabe ohne IP Adresse wie folgt dargestellt:
set DNS entry BARAMUNDIVMPROD

Kann ich Hosts mit privaten Adressen durch einen Zusatz in der If Schleife ausklammern, bzw auch mit "no IP" versehen, oder ist dafür eine 2te If schleife notwendig? Man könnte auch die IF Schleife dahingehend ändern, dass set DNS entry nur wenn die Primary IP 141.244 enthält, alle anderen erhalten den Zusatz no IP und werden aus der DNS Zone gelöscht, falls vorhanden. Alle Hosts der Universität sind im Subnet 141.244.0.0/16
Vielen Dank.
GlG, Bernhard
145033
Lösung 145033 12.08.2020 um 10:25:53 Uhr
Goto Top
Get-bConnectEndpoint | %{
    If ($_.PrimaryIP -like '141.244.*'){  
        "set DNS entry $($_.Hostname) $($_.PrimaryIP)"  
    }else{
        "no IP $($_.Hostname)"  
    }
}
kaspersky
kaspersky 12.08.2020 um 11:52:05 Uhr
Goto Top
Vielen Dank,
funktioniert perfekt.
LG, Bernhard