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

Frage Entwicklung

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, 6077 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
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 ...

Batch & Shell
Batch - Textdatei benutzerbezogen auslesen
Frage von listigerTeppichBatch & Shell4 Kommentare

Hallo beisammen :) ich habe eine txt-Datei in der pro Zeile ein Username und dahinter ein Dateiname steht. Diese ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 16 StundenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit25 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...