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 Immer wiederkehrende Befehle in einer XML oder einem Object speicher

Mitglied: mayho33

mayho33 (Level 2) - Jetzt verbinden

10.01.2014, aktualisiert 26.01.2014, 1740 Aufrufe, 6 Kommentare, 3 Danke

Hallo Community!

Ich stehe wieder mal vor einem "unlösbaren" Problem und hoffe auf eure Hilfe!

Seit kurzem beschäftige ich mich mit Powershell und frage mich ob man immer wiederkehrende Commandos nicht etwa in einer XML speicher kann,

(z.B. sowas: $ar = get-process -name $KillDelayed | %{ $_.closemainwindow() } -ErrorAction SilentlyContinue ; $myError = $null ; $myError = $?
oder ein Command für Logging, usw...)

und dieses Commando aus der xml zur Laufzeit ausliest und ausführt.

Warum ich das tun möchte: Speziell beim Logging sehe ich, dass ich die Commands sehr oft brauche in verschiedenen eigenen Cmdlets. Will ich also eine Änderung machen, muss ich das in allen cmdlets tun in denen ich z.B. in ein Logfile schreibe.
Nun dachte ich, dass dass Command an einem zentralen Ort gespeichert doch viel einfacher wartbar wäre und ich im cmdlet nichts ändern muss.

Hat jemand eine Idee wie ich das umsetzen könnte? Stehe voll am Schlauch, nicht mal ein Ansatz.

Danke für eure Hilfe!

Mayho

Mitglied: colinardo
10.01.2014, aktualisiert um 18:21 Uhr
Hallo Mayho,
du kannst dir die Funktionen im Powerhell-Profil hinterlegen, dann hast du sie in jedem Powershell-Script zur Verfügung stehen:
http://www.windowspro.de/wolfgang-sommergut/powershell-konfigurieren-mi ...
darin kannst du dir dann z.B. eine Funktion zum Logging etc. anlegen
Function Log($text, $file){
...
...
}
Grüße Uwe
Bitte warten ..
Mitglied: mayho33
10.01.2014 um 18:21 Uhr
Hi colinardo!

Danke für deine Antwort!

Leider ist das nicht ganz das was ich wollte oder ich habe es falsch verstanden.

Eine etwas genauere Erklärung:

Wir basteln gerade an der Umsetzung eines InstallScripts in Powershell für SCCM2012. Das ganze soll modular aufgebaut sein, sprich, für jede Function ein eigenes cmdlet. Das ganze Set wird dann per MSI auf dem Zielclient hier installiert: "C:\Windows\System32\WindowsPowerShell\v1.0\Modules" damit die Functions global verfügbar sind.

Es werden also in etwa 15 cmdlets sein die via einem "Doing.ps1" angesprochen werden. jedes cmdlet schreibt über ein Write-Log-cmdlet ins Logfile.
Da das logfile natürlich schön und gleichmäßig formatiert sein soll kommen einige "Aufrufe" zusammen. Und das aus fast allen cmdlets die wir erstellen. Sollte also eine Änderung in der Formatierung des LogFiles anstehen, müssten wir fast alle cmdlets angreifen und diese Änderung nachziehen.

Meine Idee war also eine XML in der die Command für das Logging hinterlegt sind (z.B. WriteLog -CreationSteps Create, WriteLog -CreationSteps Progress -LogText "irgendwas", WriteLog -CreationSteps Finish, usw....)

(Ich dachte da mehr an Objects usw., sprich das XML auslesen in ein Object speichern, sodass es nicht mehr reiner Text ist sondern die Parameter wieder als solche erkannt werden. Write-Log -CreationSteps......)

das wird mitunter 10-12 mal mit jeweils anderen Parametern oder Strings gemacht je nach Vorraussetzung und cmdlet.
Mühsam wenn z.B. zwischen den einzellnen Zeilen eine Leerzeile eingebaut werden soll, oder der TimeStamp anders formatiert werden soll, oder, oder, oder.

Wäre das in einer XML hinterlegt würde der Aufruf sich nicht ändern. Es bracht nur die XML editiert zu werden und schon schauts anders aus.

Das mit den Profiles geht nicht. Der SCCM führt Scripte usw. immer als System aus der hat im Pronzip kein Profil und s müsste ja schon angepasst sein bevor die Installation anläuft. Bei neu aufgesetzen Clients oder solche die gerade aufgesetzt werden leider nicht möglich.

Trotzdem Danke!

Ne andere Idee eventuell??

Grüße Mayho!
Bitte warten ..
Mitglied: colinardo
10.01.2014, aktualisiert 11.01.2014
Habe dazu vor einiger Zeit mal einen Beitrag zum Speichern und Auslesen von Einstellungen aus einer XML-Datei geschrieben, eventuell hilft dir das bei deinem Projekt weiter:
https://www.administrator.de/contentid/208115

Grüße Uwe
Bitte warten ..
Mitglied: mayho33
11.01.2014, aktualisiert um 11:07 Uhr
Hi!

Danke für den ausführliche Beitrag, aber das XML auslesen ist keine Problem.

Ich möchte die Werte aus der XML wieder brauchbar machen. Speichert man einen Wert in der XML (etwa so: XML-Property: Loggoing_StopProc, Value: WriteLog -CreationSteps Progress -LogText "irgendwas") und lese diesen dann in PS in z.B. ein $Value ein, wird er anschließend natürlich nicht mehr als Aufruf einer Function erkannt, ist ja nun ein String. Den umzuwandeln in was Verwertbares habe ich bisher nicht geschafft.

Ich werde es aber auf die 2 Varianten versuchen:

a)
Alle cmdlets übergeben ihre Loggings an eine "Zwischen-Funktion" in der die Formatierung vorgenommen wird. gibt es Änderungen in der Formatierung muss ich das wenigstens nur mehr in einem Cmdlet machen.

Etwa so:

Aufruf im übergeordneten Ps1 = Stop-Procs -ProcessList "proc1,proc2,proc3,..."
in Stop-Procs wird für jeden beendeten Process nun Format-Log -Function Stop_Proc -LogText "stopping process <Name> successfully" aufgerufen
Format-Log baut den eigentlichen Eintrag so zusammen und formatiert ihn, dass er ins Logfile eingetragen werden kann und diese auch gut lesbar ist. Anschließend wird Write-Log mit den entsprechenden Doings aufgerufen und schreibt das Logfile.

Das ganze gibt es dann auch für alle anderen cmdlets. Jedes gibt unformatiert seinen Log an Format-Log weiter. und dieser arbeitet den String entsprechend um.

Ist zwar nicht ganz das was ich ursprünglich machen wollte, weil noch ein ZwischenSchritt drinnen ist und das verlangsamt den Ablauf, aber es ist praktikabel und besser wartbar.

b)
in der XML werden enthält das Property nur mehr das bereits formatierte Value für den LogText. Diesen lese ich in eine Variable ein und übergebe ihn an Write-Log

Was in beiden Varianten halt nicht funktioniert ist z.B. dass ich das ganze Command ändere an einem zentralen Ort.
Etwa so, dass ich z.B. das Property1 von mir aus lösche. Lese ich nun den Folder des XML entsprechend der Function in ein Array ist diese Function halt nicht mehr das. Alles andere ist sehr statisch. Wollte ich vermeiden. Siehe Bsp:

Folder:Stop-Proc:
Property1: Value = WriteLog -CreationSteps Create
Property2: Value = -CreationSteps Progress -LogText "irgendwas"
...
...
Property3: Value =WriteLog -CreationSteps Finish
...
...
Folder: Uninstall
...
...
Folder Install
...
...


Danke trotzdem für deine Unterstützung und Hilfe! Dein Beitrag bekommt ein dickes +

Falls doch noch jemand einen Tipp hat für mich wie ich das so umsetzen könnte wie ich das Anfangs erklärt habe, würde mich das freuen!

lg

Mayho
Bitte warten ..
Mitglied: colinardo
LÖSUNG 11.01.2014, aktualisiert 26.01.2014
Zitat von mayho33:
Ich möchte die Werte aus der XML wieder brauchbar machen. Speichert man einen Wert in der XML (etwa so: XML-Property:
Loggoing_StopProc, Value: WriteLog -CreationSteps Progress -LogText "irgendwas") und lese diesen dann in PS in z.B. ein
$Value ein, wird er anschließend natürlich nicht mehr als Aufruf einer Function erkannt, ist ja nun ein String. Den
umzuwandeln in was Verwertbares habe ich bisher nicht geschafft.
Also einen String kannst du so wieder in einen Scriptblock wandeln, das wäre kein Problem:
01.
function Convert-StringToScriptBlock {
02.
  param(
03.
  [parameter(ValueFromPipeline=$true,Position=0)]
04.
  [string] $string
05.
  )
06.
 $sb = [scriptblock]::Create($string)
07.
 return $sb
08.
}
09.
# Konvertiere einen String zu einem Scriptblock
10.
$code = echo "Write-host 'Das ist ein Test'" | Convert-StringToScriptBlock
11.
# führe den Code aus
12.
&$code
Grüße Uwe
Bitte warten ..
Mitglied: mayho33
26.01.2014 um 23:59 Uhr
Hi Uwe!

Sorry, dass ich mich so lange nicht gemeldet habe, War etwas im Stress.

Danke für diesen echt hilfreichen Tipp! Der ist perfekt!!

Ab jetzt bist du wohl mein Hero!

lg

Mayho

PS: eventuell hast du hier auch sowas geniales parat? ( https://www.administrator.de/contentid/227812 )
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PowerShell Compare-Object
gelöst Frage von derhoeppiBatch & Shell1 Kommentar

Hallo mit Hilfe von Compare-Object vergleiche ich zwei Array. Dabei kommen einige Unterschiede heraus. Ich habe ein führendes Array ...

Batch & Shell
PowerShell Object problem
gelöst Frage von CloudyBatch & Shell3 Kommentare

Hallo, ich habe aktuell ein kleines Problem. Ich erhalte eine CSV Datei mit den Spalten Standort und IP-Adresse zu ...

VB for Applications
Vbscript Fehlercode: Object required
gelöst Frage von aletriVB for Applications2 Kommentare

Guten Morgen seh vor lauter Bäume den Wald nicht mehr! bei Ausführen des Cods kommt folgende Fehlermeldung: Line:9 Char:1 ...

Batch & Shell

PowerShell Where-Object multiple Conditions

gelöst Frage von derhoeppiBatch & Shell2 Kommentare

Hallo, ich habe ein Array das mit Where-Object gefiltert wird. Beim Aufbau des Filters stehe ich jedoch vor einem ...

Neue Wissensbeiträge
Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 9 StundenSicherheits-Tools5 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 3 TagenOff Topic14 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Humor (lol)
Spirit of Health-Kongress in Berlin
Information von AnkhMorpork vor 3 TagenHumor (lol)3 Kommentare

tgif! Beim dritten Spirit of Health-Kongress trafen sich am Wochenende Alternativmediziner und Naturheilkundler im Maritim Hotel Berlin, um sich ...

Windows 7

Updates zum Nachrüsten des SHA-2-Support für Windows 7 SP1, Windows Server 2008 (R2) und WSUS 3.0 SP2 sind da

Information von kgborn vor 5 TagenWindows 7

Wie bereits früher angekündigt (Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019) hat Microsoft die ...

Heiß diskutierte Inhalte
ISDN & Analoganschlüsse
Für was ist der Kasten direkt neben dem EVz59 zuständig?
gelöst Frage von Windows10GegnerISDN & Analoganschlüsse18 Kommentare

Hallo, im Schwarzwald habe ich folgendes Foto gemacht: Der Rechte Kasten ist der APL. So was ähnliches wie den ...

Cloud-Dienste
Remotedesktopverbindungen beeinflussen sich gegenseitig
gelöst Frage von Samy89Cloud-Dienste15 Kommentare

Moin, ich habe mehrere RDPs gleichzeitig laufen, auf denen jeweils ein Script via Powershell läuft. In diesem Prozess benutzt ...

Netzwerkgrundlagen
Reicht 10GBit Uplink Port für Stacking für ein 10GBit Switch?
gelöst Frage von walnickNetzwerkgrundlagen12 Kommentare

Hallo, Ich habe eine frage. Ich überlege gerade 2 neue Switche von CiscoSG350XG-24F  zu kaufen und die als Core ...

DNS
Größere DNS Probleme nach zweitem DC. Eigentlich sollte es auch dadurch besser werden
Frage von TeWutzDNS12 Kommentare

Hallo zusammen, nachdem ich letzte Woche erfolgreich einen zweiten DC ) an den Start gebracht habe melden sich weiterhin ...