Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Powershell - Textdatei auslesen und dynamische Variablen vergeben zur Erstellung einer Batch-Datei

Mitglied: 106543

106543 (Level 2)

03.05.2012, aktualisiert 04.05.2012, 6130 Aufrufe, 18 Kommentare

Hallo Leute,

habe ein kleines Problem bezüglich Powershell. Das Script soll Server aus der Citrix XenApp Farm auslesen. Soweit kein Problem. Die Server werden richtig ausgelesen und in einer temporären Textdatei gespeichert. Danach wird das ganze so gekürzt, dass wirklich NUR die Server drinstehen. Als letztes (und hier liegt das Problem) soll die Datei ausgelesen werden und die Server in unterschiedliche Variablen verpackt werden.

Die .txt-Datei mit den Servern sieht wie folgt aus:
Servername1
Servername2
Servername3
...

Das habe ich bereits zustande gebracht:
#Server auslesen und kürzen
(Get-XAServer| Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > Temp\Datacollector.txt
$datei = Get-Content $loc\Temp\Datacollector.txt
$datei | select-object -last 2 > Temp\Datacollector.txt

#Server auslesen und in Batch schreiben
for ($j=0;$j -le 2;$j++) {Invoke-Expression "`$j"; `
Foreach ($i in $test1 = Get-Content $loc\Temp\Datacollector.txt) { `
$spalte1 = $i | %{ $_.Split(",")[0]; }; `
$spalte1 = ${Datacollector_$j}; `
write-host "$Datacollector_$j"; `
} `
}

wobei hier :
$loc= Get-Location

Hätte mir vorgestellt dass die Variable $Datacollector_$j dann zu $Datacollector_1, $Datacollector_2, usw. wird.

Danke für eure Hilfe
Dominik
Mitglied: mak-xxl
03.05.2012 um 12:15 Uhr
Moin Dominik,

Zitat von 106543:
$spalte1 = $i | %{ $_.Split(",")[0]; }; `

Was steht jetzt in der Variable '$Spalte1'?

$spalte1 = ${Datacollector_$j}; `

Und jetzt? (Oder: Warum überschreibst Du jetzt die obige Variable, ohne mit dem Inhalt erst etwas zu machen? Oder: Was steht zum Zeitpunkt in der/den Variable(n) '$Datacollector_$j')

write-host "$Datacollector_$j"; `

Wolltest Du evtl. ein Array mit dem Inhalt von '$Spalte1' füllen?

wobei hier :
$loc= Get-Location

Was will das besagen?

Hätte mir vorgestellt dass die Variable $Datacollector_$j dann zu $Datacollector_1, $Datacollector_2, usw. wird.

Warum füllst Du die Variablen nicht in der For-Each-Schleife?

Foreach ($i in $test1 = Get-Content $loc\Temp\Datacollector.txt) { 
    $Datacollector_$j = $i | %{ $_.Split(",")[0]; }; 'liefert Servername(n)? 
}
Besser wären die Servernamen allerdings in einem Array aufgehoben, die Anzahl der vorhandenen (erkannten) Servernamen gibt dann ein '$Datacollector[-1]' aus. Das Array kannst Du ebenfalls (dann ohne Suffix) in der Schleife füllen.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
03.05.2012 um 12:47 Uhr
Hi Mario,

erstmal danke für die prompte Hilfe ich weiß das sehr zu schätzen.
Zu deinen Fragen bzw. Anmerkungen:

> Zitat von 106543:
> ----
> $spalte1 = $i | %{ $_.Split(",")[0]; }; `

Was steht jetzt in der Variable '$Spalte1'?

Da steht beim ersten Durchlauf der erste Servername drin.
Beim zweiten Durchlauf der zweite usw.

> $spalte1 = ${Datacollector_$j}; `

Und jetzt? (Oder: Warum überschreibst Du jetzt die obige Variable, ohne mit dem Inhalt erst etwas zu machen? Oder: Was steht
zum Zeitpunkt in der/den Variable(n) '$Datacollector_$j')

Ich schreibe die Variable einfach in die andere, damit sie mir über die Schleife hinaus erhalten bleibt, will heißen dass ich den Wert von $Datacollector_$j gerne behalten würde, deswegen auch $j am Ende, weil $j eine fortlaufende Zahl sein soll wie oben in der For-Schleife ausgeführt.

> write-host "$Datacollector_$j"; `

Wolltest Du evtl. ein Array mit dem Inhalt von '$Spalte1' füllen?

Da wollte ich eig. nur überprüfen, ob der Wert auch wirklich übernommen wird. Die Zeile wird später im fertigen Script nicht mehr zu finden sein ....

> wobei hier :
> $loc= Get-Location

Was will das besagen?

Der Befehl get-location gibt den aktuellen Pfad zurück, den ich so in eine Variable speichere und für später aufheben kann.

> Hätte mir vorgestellt dass die Variable $Datacollector_$j dann zu $Datacollector_1, $Datacollector_2, usw. wird.

Warum füllst Du die Variablen nicht in der For-Each-Schleife?

Dachte das hätte ich schon? Oo

> Foreach ($i in $test1 = Get-Content $loc\Temp\Datacollector.txt) { 
>     $Datacollector_$j = $i | %{ $_.Split(",")[0]; }; 'liefert Servername(n)? 
> } 
> 
Besser wären die Servernamen allerdings in einem Array aufgehoben, die Anzahl der vorhandenen (erkannten) Servernamen gibt
dann ein '$Datacollector[-1]' aus. Das Array kannst Du ebenfalls (dann ohne Suffix) in der Schleife füllen.

Array hab ich leider wenig bis gar keine Erfahrung von daher würde ich das gerne vermeiden...

Grüße Dominik
Bitte warten ..
Mitglied: mak-xxl
03.05.2012 um 14:19 Uhr
Moin Dominik,

Zitat von 106543:
> > $spalte1 = ${Datacollector_$j}; `
>
> Und jetzt? (Oder: Warum überschreibst Du jetzt die obige Variable, ohne mit dem Inhalt erst etwas zu machen? Oder: Was
> steht zum Zeitpunkt in der/den Variable(n) '$Datacollector_$j')

Ich schreibe die Variable einfach in die andere, damit sie mir über die Schleife hinaus erhalten bleibt, will heißen
dass ich den Wert von $Datacollector_$j gerne behalten würde, deswegen auch $j am Ende, weil $j eine fortlaufende Zahl sein
soll wie oben in der For-Schleife ausgeführt.

Was Du willst, ist schon klar - dann musst Du das aber auch tun!
$Datacollector_$j = $Spalte1;
Links steht immer der, der bekommt, rechts der, der gibt ... (Ist nicht politisch gemeint! )
Und weil das Doppelmoppelei ist, machst Du es evtl. gleich so, wie oben gepostet (jedes gefilterte 'Split'-Ergebnis in eine Variable '$Datacollector_$j').

Der Befehl get-location gibt den aktuellen Pfad zurück, den ich so in eine Variable speichere und für später aufheben kann.

Hat dann also erstmal nichts mit dem Problem zu tun ... Puuhh ...

Array hab ich leider wenig bis gar keine Erfahrung von daher würde ich das gerne vermeiden...

Musst Du auch nicht verwenden, aber: Wenn Du in einer Schleife Variablen 'füllst' (also etwa $Datacollector_1, $Datacollector_2 ... $Datacollector_n), dann weißt Du erstmal nicht, wieviele es/gefüllt geworden sind (Ergo - wieviele Server in Deinem konkreten Fall gefunden wurden). Zu diesem Zweck (Du willst schließlich alle Variablen weiterverwenden) musst Du Dir die Zählvariable aus der Schleife retten (merken) oder mühsam (evtl. noch per Stringzerlegung) existierende Variablen abfragen ...
Ein Array (hier entspr. Lektüre) hat hier den Vorteil, dass es, wie oben erwähnt, seine eigenen Grenzwerte quasi mit sich herumträgt.
Es funktioniert aber auch mit einzelnen Variablen, umstellen auf Arrays kannst Du immer noch - es ist so einfach ...

Wenn Du diesen Gedanken nun folgst, stellst Du gewiss fest, das einer sofortigen Verwendung der gefundenen Servernamen innerhalb der Schleife auch nichts wesentliches entgegensteht ...

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
03.05.2012 um 14:58 Uhr
$Datacollector_$j = $Spalte1;
</code>
Links steht immer der, der bekommt, rechts der, der gibt ... (Ist nicht politisch gemeint! )
Und weil das Doppelmoppelei ist, machst Du es evtl. gleich so, wie oben gepostet (jedes gefilterte 'Split'-Ergebnis in
eine Variable '$Datacollector_$j').
O.O ich war blind daran hats gelegen
1000-fachen Dank dir xD die einfach Dinge sieht man meistens nicht ^^
muss aber nochmal den richtigen Funktionstest machen danach setz ich dieses Thema auf "gelöst"

Dominik
Bitte warten ..
Mitglied: 106543
03.05.2012 um 16:33 Uhr
Hallo,

hmm hat nicht ganz so geklappt wie erhofft jetzt hab ich folgenden Befehl:

#Script zum Auslesen der Server
##Datacollector
write-host Datacollector
(Get-XAServer| Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > Temp\Datacollector.txt
$datei = Get-Content $loc\Temp\Datacollector.txt
$datei | select-object -last 2 > Temp\Datacollector.txt
for ($j=1;$j -le 2;$j++) {
Foreach ($i in $test1 = Get-Content Temp\Datacollector.txt) {
$spalte1 = $i | %{ $_.Split(",")[0]; };
${Datacollector_$j} = $spalte1;
}
write-host "Datacollector $j"
write-host "${Datacollector_$j}";
}

aber jetzt hab ich das Problem dass da die Schleifen ja doppelt durchlaufen also beide dann hab ich in der Variablen IMMER den selben Server stehn also den letzen;
soll heißen in jeder Variablen steht nun Servername 3 in diesem Beispiel

Grüße Dominik
Bitte warten ..
Mitglied: mak-xxl
03.05.2012 um 17:12 Uhr
Moin Dominik,

Zitat von 106543:
hmm hat nicht ganz so geklappt wie erhofft jetzt hab ich folgenden Befehl:

Erhofft hattest Du (indirekt), man könne in dem Schleifendurchlauf gleich noch (soviele) Variablen erstellen, wie gebraucht werden - und dabei den Namen aus einem Basisteil und einer Zählvariablen zusammensetzen. Und vielleicht noch ein wenig mehr ...

... aber jetzt hab ich das Problem dass da die Schleifen ja doppelt durchlaufen also beide dann hab ich in der Variablen IMMER den selben Server ...

Warum tust Du Dir diese Variablengeschichte an? Nutze den herausgelösten Servernamen in der Schleife (und beachte den verbleibenden Nutzen der Äußeren), also etwa so:

01.
Write-host Datacollector 
02.
(Get-XAServer| Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > Temp\Datacollector.txt 
03.
$datei = Get-Content $loc\Temp\Datacollector.txt 
04.
$datei | select-object -last 2 > Temp\Datacollector.txt 
05.
for ($j=1;$j -le 2;$j++) { 
06.
    Foreach ($i in $test1 = Get-Content Temp\Datacollector.txt) { 
07.
        $SrvName = $i | %{ $_.Split(",")[0]; }; 
08.
        Write-Host $SrvName;   # Ausgabe bzw. Weiterverarbeitung 
09.
10.
}
Das Auslesen aller Variablen (mit den genannten Problemen) oder eines Arrays müsste auch wieder in einer Schleife erfolgen - das kannst Du besser gleich erledigen.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
04.05.2012 um 10:02 Uhr
Hallo Mario,

ich denke du hast mein Problem bei der letzten Schilderung nicht ganz verstanden.
Ich führe das Script jetzt mal genau so aus wie es bei dir da oben steht
da funktioniert ja auch alles prima mit dem kleinen Problem, dass ich die Server gleich zweimal kriege -.-

Also beim Quelltext:
01.
Write-host Datacollector  
02.
(Get-XAServer| Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > Temp\Datacollector.txt  
03.
$datei = Get-Content $loc\Temp\Datacollector.txt  
04.
$datei | select-object -last 2 > Temp\Datacollector.txt  
05.
for ($j=1;$j -le 2;$j++) {  
06.
     Foreach ($i in $test1 = Get-Content Temp\Datacollector.txt) {  
07.
            $SrvName = $i | %{ $_.Split(",")[0]; };  
08.
            Write-Host $SrvName;   # Ausgabe bzw. Weiterverarbeitung  
09.
      }  
10.
}
Kommt folgende Ausgabe raus:
01.
Datacollector 
02.
Servername1 
03.
Servername2 
04.
Servername1 
05.
Servername2
was ja durchaus logisch ist, da die Schleife ja praktisch "doppelt gemoppelt" ist
ich werde mich mal in die Arrays einlesen vielleicht fällt mir die Aufgabe ja bei diesen leichter...

Man schreibt sich...
Dominik
Bitte warten ..
Mitglied: mak-xxl
04.05.2012 um 11:47 Uhr
Moin Dominik,

mein Kommentar
... (und beachte den verbleibenden Nutzen der Äußeren) ...
sollte Dich auf das Problem hinweisen - die äußere Schleife ist zur einmaligen Gewinnung der Servernamen kontraproduktiv. Da ich aber nicht sicher sein kann, ob sie noch zu etwas anderem dient ... Kurzer Test: Zeile 5+10 (Dein letzter Post) auskommentieren.


Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
04.05.2012 um 12:17 Uhr
Hallo Mario,

erstmal danke dass du nicht mit mir verzweifelst
kann dir schon mit Sicherheit sagen dass die äußere (sprich: for-) Schleife nur zum Hochzählen der Variablen dient.

Der Nutzen des Äußeren hält sich in Grenzen, da hier nur die Server ausgelesen werden (get-XAServer), dann nach den Datacllectoren gefiltert wird (Where-Object {$_.Folderpath -eq "Servers/Datacollector"} ) und dann der Servername ausgelsen wird und in die Datei Datacollector.txt geschrieben wird.
In den letzten 2 Zeilen werden lediglich die Datacollectoren herausgelöst da ansonsten in der .txt-Datei folgendes stehen würde:

<Leerzeile>
ServerNames
Servername1
Servername2

Grüße und vielen Dank schonmal
Dominik
Bitte warten ..
Mitglied: mak-xxl
04.05.2012 um 12:26 Uhr
Moin Dominik,

Zitat von 106543:
Der Nutzen des Äußeren hält sich in Grenzen, da hier nur die Server ausgelesen werden (get-XAServer), dann nach ...

Also das wesentliche ... Ja - ich hatte geschrieben ...'der Äußeren ...' - das bezog sich nur auf die selbige Schleife. Jetzt läuft es wie gewünscht?

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
04.05.2012 um 13:09 Uhr
Hallo Mario,

leider nein aber ich bin grade dabei das Ganze mithilfe des Arrays umzusetzen. Bin mal gespannt was daraus wird.

Grüße
Dominik
Bitte warten ..
Mitglied: 106543
07.05.2012 um 14:37 Uhr
Hallo Mario,

nun hab ich noch ein kleines Problem und dann läuft das Script mustergültig
Nun bekomme ich die Variablen richtig ausgelesen bzw. vergeben.
Nun noch eine Frage, die wahrscheinlich ziemlich einfach sein wird.

Habe den folgenden Quelltext:
01.
##Datacollector 
02.
Write-Host Datacollector 
03.
(Get-XAServer| Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > Temp\Datacollector.txt 
04.
$datei = Get-Content $loc\Temp\Datacollector.txt 
05.
$datei | select-object -last 2 > Temp\Datacollector.txt 
06.
$j = 1 
07.
Foreach ($i in $test1 = Get-Content Temp\Datacollector.txt) { 
08.
$spalte1 = $i | %{ $_.Split("")[0]; }; 
09.
${Datacollector$j} = $spalte1; 
10.
write-host Datacollector $j 
11.
write-host ${Datacollector$j} 
12.
$j = $j + 1 
13.
14.
echo "set Datacollector = $Datacollector1,$Datacollector2" > Server.bat
Wie du siehst will ich mit dem letzten Befehl die Servervariablen als .bat-Befehl in eine .bat-Datei speichern, aber irgendwie werden hier die Variablen nicht umgesetzt in die passenden Werte.
D.h. ich bekomme folgendes in der Server.bat raus:
01.
set Datacollector = ,
Ich habe schon überprüft, ob die Variablen wirklich gefüllt sind und ja ... sie sind gefüllt.

Danke für die Hilfe bisher
Dominik
Bitte warten ..
Mitglied: mak-xxl
08.05.2012 um 08:45 Uhr
Moin Dominik,

wenn Du in eine Datei schreibst, nimm die 'Add-Content' oder 'Set-Content'-Methoden, dort wird die Kodierung anhand der Ausgabedatei (meistens richtig) vorgenommen.
Im konkreten Fall kommt hinzu, das in einer Batch-Datei ein 'set'-Befehl stets mit Literalen notiert und ausgeführt werden sollte, also so:

set "Variable=Wert"
Das ist wichtig, um den String definiert abzuschließen (keine sog. 'Trailing Blanks').
Da zusätzlich die Variablen vor dem Schreiben durch Ihren Inhalt ersetzt werden müssen, sieht das Konstrukt in der PS so aus:

Set-Content "server.bat" "set ""Datacollector=$Datacollector2,$Datacollector2"""
Die dreifachen Literale stehen für:

- äußeres Paar bildet Gesamtstring für 'Set-Content'-Befehl
- inneres Paar bewirkt Variablenauflösung
- mittleres Paar wird unverändert in Datei geschrieben

BTW: Beim Schreiben der Strings dürfte Dir spätestens der Nachteil der Variablenlösung aufgehen - was passiert, wenn mehr oder weniger als zwei Servernamen erkannt werden?

Verwende bitte für Deine Posts - auch nachträglich - die Code-Formatierung!

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
08.05.2012 um 09:51 Uhr
Hallo Mario,

das mit Add- bzw. Set-Content habe ich jetzt gleich mal für alle meine anderen Script umgesetzt. Ich finde diese Lösung wirklich besser.
Das ist der aktuelle Quellcode:
01.
Write-Host Datacollector 
02.
(Get-XAServer| Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > Temp\Datacollector.txt 
03.
$datei = Get-Content $loc\Temp\Datacollector.txt 
04.
$datei | select-object -last 2 > Temp\Datacollector.txt 
05.
$j = 1 
06.
Foreach ($i in $test1 = Get-Content Temp\Datacollector.txt) { 
07.
$spalte1 = $i | %{ $_.Split("")[0]; }; 
08.
${Datacollector$j} = $spalte1; 
09.
$j = $j + 1 
10.
write-host ${Datacollector$j} 
11.
12.
set-Content "Wirkserver.bat" "set ""Datacollector=${Datacollector1},${Datacollector2}"""
Allerdings besteht beim aktuellen Script jetzt das Problem, dass nun doch die Variablen ausserhalb der Schleife leer sind also eigentlich müsste ja
01.
${Datacollector$j}
übersetzt werden in
01.
$Datacollector1 bzw. 
02.
$Datacollector2
Das passiert aber nicht wenn ich aber wieder mit $j eingebe bekomme ich den Wert ausgegeben.

Hast du eine Ahnung, warum das so ist?

Danke für die Hilfe und Grüße
Dominik
Bitte warten ..
Mitglied: mak-xxl
LÖSUNG 08.05.2012, aktualisiert 11.12.2013
Moin Dominik,

poste oder sende per PM bitte mal die originale Datei 'Datacollector.txt'.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106543
09.05.2012 um 08:43 Uhr
Hallo Mario,

eine kleine Kinderkrankheit hat das Script noch.
Ich poste trotzdem schonmal den Code:
01.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > $loc\Temp\Datacollector.txt 
02.
 
03.
$datei = Get-Content "$loc\Temp\Datacollector.txt"   # Datei mit Servernamen 
04.
 
05.
foreach ($i in $datei) {                             # jede Zeile in Datei 
06.
  If ($i.length -gt 2) {			     # Kein Fehler bei eventuellen Leerzeilen 
07.
    If ($i.substring(0, 2) -match "HM") {            # nur, wenn "HM" als Zeilenanfang 
08.
      $strBAT = $strBAT + $i + ",";	             # String zusammensetzen 
09.
10.
11.
12.
 
13.
$strBAT = $strBAT.substring(0, $strBAT.length - 1);  # letztes Komma weg 
14.
set-Content "Wirkserver.bat" "set ""Datacollector=$strBAT""";
Das Problem hierbei ist jetzt noch das Ergebnis, das in der Wirkserver.bat auftaucht:
01.
set "Datacollector=Servername1                                                                       ,Servername2                                                                       "
Da sind die Leerzeichen (keine Tabs) noch drin was den Befehl in einer Batch unsinnig macht.

Grüße Dominik
Bitte warten ..
Mitglied: 106543
09.05.2012 um 08:52 Uhr
Hallo Mario,

ok Problem gelöst
einfacher Replace Befehl eingefügt
01.
$text = $text -replace "\s{5,}", ""
Den hab ich dann vor
01.
$strBAT = $strBAT.substring(0, $strBAT.length - 1);  # letztes Komma weg
eingefügt und Zack! es läuft.

Danke vielmals ich schließe das Thema jetzt
Dominik
Bitte warten ..
Mitglied: 106543
09.05.2012 um 10:25 Uhr
So hier nochmal das komplette fertige Script
01.
write-host "Citrix-Befehle werden geladen..." 
02.
Add-PSSnapIn Citrix.Common.Commands 
03.
write-host "Citrix.Common.Commands wurden geladen." 
04.
Add-PSSnapin Citrix.XenApp.Commands 
05.
write-host "Citrix.XenApp.Commands wurden geladen." 
06.
Add-PSSnapIn Citrix.Common.GroupPolicy 
07.
write-host "Citrix.Common.GroupPolicy wurde geladen." 
08.
 
09.
$loc = Get-Location 
10.
New-Item -Path $loc\Temp -ItemType Directory 
11.
 
12.
#Script zum Auslesen der Server 
13.
##Datacollector 
14.
Write-Host Datacollector 
15.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/Datacollector"} | Select-Object ServerName) > $loc\Temp\Datacollector.txt 
16.
 
17.
$DatacollectorDatei = Get-Content "$loc\Temp\Datacollector.txt" 
18.
 
19.
foreach ($i in $DatacollectorDatei) { 
20.
  If ($i.length -gt 2) { 
21.
    If ($i.substring(0, 2) -match "HE") { 
22.
      $string = $string + $i + ","; 
23.
24.
25.
26.
$string = $string -replace "\s{2,}","" 
27.
$string = $string.substring(0, $string.length - 1); 
28.
set-Content "Wirkserver.bat" "set ""Datacollector=$string"""; 
29.
 
30.
##Plottserver 
31.
write-host Plottserver 
32.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/Plottserver"} | Select-Object ServerName) > $loc\Temp\Plottserver.txt 
33.
 
34.
$PlottserverDatei = Get-Content "$loc\Temp\Plottserver.txt" 
35.
$string = "" 
36.
foreach ($i in $PlottserverDatei) { 
37.
  If ($i.length -gt 2) { 
38.
    If ($i.substring(0, 2) -match "HE") { 
39.
      $string = $string + $i + ","; 
40.
41.
42.
43.
$string = $string -replace "\s{2,}","" 
44.
$string = $string.substring(0, $string.length - 1); 
45.
Add-Content "Wirkserver.bat" "set ""Plottserver=$string"""; 
46.
 
47.
##RA-GUI-Server 
48.
write-host RA-GUI-Server 
49.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/RA-GUI-Server"} | Select-Object ServerName) > $loc\Temp\RAGUIServer.txt 
50.
 
51.
$RAGUIServerDatei = Get-Content "$loc\Temp\RAGUIServer.txt" 
52.
$string = "" 
53.
foreach ($i in $RAGUIServerDatei) { 
54.
  If ($i.length -gt 2) { 
55.
    If ($i.substring(0, 2) -match "HE") { 
56.
      $string = $string + $i + ","; 
57.
58.
59.
60.
$string = $string -replace "\s{2,}","" 
61.
$string = $string.substring(0, $string.length - 1); 
62.
Add-Content "Wirkserver.bat" "set ""RAGUIServer=$string"""; 
63.
 
64.
##DM_STM 
65.
write-host DM-STM-Server 
66.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/SST-Server DM_STM"} | Select-Object ServerName) > $loc\Temp\DMSTMServer.txt 
67.
 
68.
$DMSTMServerDatei = Get-Content "$loc\Temp\DMSTMServer.txt" 
69.
$string = "" 
70.
foreach ($i in $DMSTMServerDatei) { 
71.
  If ($i.length -gt 2) { 
72.
    If ($i.substring(0, 2) -match "HE") { 
73.
      $string = $string + $i + ","; 
74.
75.
76.
77.
$string = $string -replace "\s{2,}","" 
78.
$string = $string.substring(0, $string.length - 1); 
79.
Add-Content "Wirkserver.bat" "set ""DMSTMServer=$string"""; 
80.
 
81.
##EAI 
82.
write-host EAI 
83.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/SST-Server EAI"} | Select-Object ServerName) > $loc\Temp\EAI.txt 
84.
 
85.
$EAIDatei = Get-Content "$loc\Temp\EAI.txt" 
86.
$string = "" 
87.
foreach ($i in $EAIDatei) { 
88.
  If ($i.length -gt 2) { 
89.
    If ($i.substring(0, 2) -match "HE") { 
90.
      $string = $string + $i + ","; 
91.
92.
93.
94.
$string = $string -replace "\s{2,}","" 
95.
$string = $string.substring(0, $string.length - 1); 
96.
Add-Content "Wirkserver.bat" "set ""EAI=$string"""; 
97.
 
98.
##FlexProd 
99.
write-host FlexProd 
100.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/SST-Server FlexProd"} | Select-Object ServerName) > $loc\Temp\FlexProd.txt 
101.
 
102.
$FlexProdDatei = Get-Content "$loc\Temp\FlexProd.txt" 
103.
$string = "" 
104.
foreach ($i in $FlexProdDatei) { 
105.
  If ($i.length -gt 2) { 
106.
    If ($i.substring(0, 2) -match "HE") { 
107.
      $string = $string + $i + ","; 
108.
109.
110.
111.
$string = $string -replace "\s{2,}","" 
112.
$string = $string.substring(0, $string.length - 1); 
113.
Add-Content "Wirkserver.bat" "set ""FlexProd=$string"""; 
114.
 
115.
##IRPM 
116.
write-host IRPM 
117.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/SST-Server IRPM"} | Select-Object ServerName) > $loc\Temp\IRPM.txt 
118.
 
119.
$IRPMDatei = Get-Content "$loc\Temp\IRPM.txt" 
120.
$string = "" 
121.
foreach ($i in $IRPMDatei) { 
122.
  If ($i.length -gt 2) { 
123.
    If ($i.substring(0, 2) -match "HE") { 
124.
      $string = $string + $i + ","; 
125.
126.
127.
128.
$string = $string -replace "\s{2,}","" 
129.
$string = $string.substring(0, $string.length - 1); 
130.
Add-Content "Wirkserver.bat" "set ""IRPM=$string"""; 
131.
 
132.
##KLS 
133.
write-host KLS 
134.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/SST-Server KLS"} | Select-Object ServerName) > $loc\Temp\KLS.txt 
135.
 
136.
$KLSDatei = Get-Content "$loc\Temp\KLS.txt" 
137.
$string = "" 
138.
foreach ($i in $KLSDatei) { 
139.
  If ($i.length -gt 2) { 
140.
    If ($i.substring(0, 2) -match "HE") { 
141.
      $string = $string + $i + ","; 
142.
143.
144.
145.
$string = $string -replace "\s{2,}","" 
146.
$string = $string.substring(0, $string.length - 1); 
147.
Add-Content "Wirkserver.bat" "set ""KLS=$string"""; 
148.
 
149.
##Terminalserver 
150.
write-host Terminalserver 
151.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/Terminalserver"} | Select-Object ServerName) > $loc\Temp\Terminalserver.txt 
152.
 
153.
$TerminalserverDatei = Get-Content "$loc\Temp\Terminalserver.txt" 
154.
$string = "" 
155.
foreach ($i in $TerminalserverDatei) { 
156.
  If ($i.length -gt 2) { 
157.
    If ($i.substring(0, 2) -match "HE") { 
158.
      $string = $string + $i + ","; 
159.
160.
161.
162.
$string = $string -replace "\s{2,}","" 
163.
$string = $string.substring(0, $string.length - 1); 
164.
Add-Content "Wirkserver.bat" "set ""Terminalserver=$string"""; 
165.
 
166.
##Verteilserver 
167.
write-host Verteilserver 
168.
(Get-XAServer | Where-Object {$_.Folderpath -eq "Servers/Verteilserver"} | Select-Object ServerName) > $loc\Temp\Verteilserver.txt 
169.
 
170.
$VerteilserverDatei = Get-Content "$loc\Temp\Verteilserver.txt" 
171.
$string = "" 
172.
foreach ($i in $VerteilserverDatei) { 
173.
  If ($i.length -gt 2) { 
174.
    If ($i.substring(0, 2) -match "HE") { 
175.
      $string = $string + $i + ","; 
176.
177.
178.
179.
$string = $string -replace "\s{2,}","" 
180.
$string = $string.substring(0, $string.length - 1); 
181.
Add-Content "Wirkserver.bat" "set ""Verteilserver=$string"""; 
182.
 
183.
##Sonstige Variablen erstellen 
184.
Add-Content "Wirkserver.bat" "set ""AlleServer=%DATACOLLECTOR%,%PLOTTSERVER%,%RAGUISERVER%,%DMSTM%,%EAI%,%FLEXPROD%,%IRPM%,%KLS%,%TERMINALSERVER%,%VERTEILSERVER%"""; 
185.
Add-Content "Wirkserver.bat" "set ""SchnittStellenServer=%DMSTM%,%EAI%,%FLEXPROD%,%IRPM%,%KLS%"""; 
186.
 
187.
Remove-Item -LiteralPath $loc\Temp -Force -Recurse
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch-Datei zum auslesen eines Speicherpfades aus einer Textdatei

Frage von PatrickS1990Batch & Shell12 Kommentare

Hallo, ich bin neu hier und benötige eure Hilfe. Ich programmiere sonst hauptsächlich in Python. Ich speichere einige Dateipfade ...

Batch & Shell

Variable in TextDatei auslesen

gelöst Frage von arvaxtrBatch & Shell5 Kommentare

Hallo Leute, ich habe eine TextDatei, in der eine Benutzervariable steht: %MyVar% ist als Benutzervariable in den Umgebungsvariablen definiert. ...

Batch & Shell

Batch Textdatei Spaltenweise auslesen

Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell

Batch: Textdatei Zeilenweise auslesen

gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 2 TagenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 3 TagenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 3 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 3 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Netzwerkmanagment im Haus mit Switch, Panel und pfsense
gelöst Frage von CorraggiounoNetzwerkmanagement19 Kommentare

hi zusammen, wir sind gerade dabei das ganze Haus bzw. die einzelnen Zimmer mit netzwerkdosen zu versorgen. Vom Keller ...

Netzwerkgrundlagen
VLAN - Offene Fragen
Frage von KnettenbrechNetzwerkgrundlagen17 Kommentare

Hallo zusammen, ich befasse mich derzeit mit dem Thema VLAN. Hierzu habe ich schon einige Guides gelesen, einschließlich des ...

Google Android
Empfehlung: Android Ortungsapp
gelöst Frage von certifiedit.netGoogle Android13 Kommentare

Guten Morgen, grundsätzlich vorweg, ich wollte mich eben schlau machen, bzgl einer Ortungsapp, welche Androidbasiert einem anderen Androidsmartphone mitteilt, ...

Router & Routing
VPN hinter zweiter Fritzbox nutzen im Nachbarhaus
gelöst Frage von georg2204Router & Routing11 Kommentare

Hallo zusammen, ich blicke hier leider nicht mehr so ganz durch. In Haus 1 steht eine Fritzbox 7390, diese ...