Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Services aus einem Array auslesen dann stückweise stoppen

Frage Entwicklung Batch & Shell

Mitglied: DanielBodensee

DanielBodensee (Level 1) - Jetzt verbinden

07.03.2014 um 13:39 Uhr, 1256 Aufrufe, 4 Kommentare, 1 Danke

Hallo zusammen,

ich muss mir eine Funktion schreiben der ich ein Array von zu stoppenden Services übergeben kann. Innerhalb der Funktion möchte ich die Servcies stoppen (wenn möglich) und darauf warten bis der Service den Status stop erreicht hat.

Im Grunde würde ich dann ein True or False zurückgeben (ob alles ohne Fehler lief) und evtl ein Array worin die nicht zu stoppenden Services zurück gegeben werden.

In VisualBasic (meine Heimat) kein Problem, aber ich möchte es per Powershell lösen, ich bin der Meinung das dürfte besser weil auch für Kollegen lesbar sein.

Aber mir geht der Knopf nicht auf wie ich das unter PS (sicher) machen kann.


Viele Grüsse,
Daniel
Mitglied: colinardo
07.03.2014, aktualisiert um 15:43 Uhr
Hallo Daniel,
etwa so:
01.
function Stop-Services([string[]]$services,[int]$maxWaitSeconds = 120){ 
02.
    $arrFehler = @() 
03.
    foreach($service in $services){ 
04.
        $svc = Get-Service $service -ErrorAction SilentlyContinue 
05.
        if ($svc){ 
06.
            if ($svc.Status -ne 'Stopped'){ 
07.
                if ($svc.CanStop){ 
08.
                    $svc.Stop() 
09.
                    $svc.WaitForStatus('Stopped',[TimeSpan]::FromSeconds($maxWaitSeconds)) 
10.
                    if ($svc.Status -ne 'Stopped'){ 
11.
                        $arrFehler += "Dienst '$service' konnte nicht gestoppt werden" 
12.
13.
                }else{ 
14.
                    $arrFehler += "Dienst '$service' darf nicht gestoppt werden (nicht erlaubt)" 
15.
16.
17.
        }else{ 
18.
            $arrFehler += "Dienst '$service' existiert nicht" 
19.
20.
21.
    if ($arrFehler.Count -gt 0){ 
22.
        $arrFehler 
23.
    }else{ 
24.
        $true 
25.
26.
 
27.
} #End Function 
28.
 
29.
# Dienste an Funktion übergeben 
30.
$result = Stop-Services -services @("Dienst1","Dienst2","Dienst3") -maxWaitSeconds 60 
31.
 
32.
# Resultat abfragen 
33.
if ($result -eq $true){ 
34.
    write-host "Keine Fehler aufgetreten" -ForegroundColor Green 
35.
}else{ 
36.
    write-host "Fehler:" -ForegroundColor Red 
37.
    write-host $result -ForegroundColor Yellow 
38.
}
Grüße Uwe
Bitte warten ..
Mitglied: DanielBodensee
07.03.2014 um 14:46 Uhr
Hallo Uwe,

super, vielen Dank, das sieht sehr gut aus und ich baue es gerade als Funktion aus.

Eine Frage habe ich noch...
Da ich diese Funktion wiederverwendbar machen will, möchte ich ein TimeOut als Parameter definieren. Wie kann ich eigentlich die Sekunden (z.Bsp. 120) in die Zeitangabe für WaitForStatus umsetzen? Als Variable habe ich [int] vorgesehen, aber ich brauche ja das Format xx:xx:xx?

Ich denke es macht auch sinn abzufragen ob der Dienst überhaupt gestoppt werden kann?

Viele Grüsse,
Daniel
Bitte warten ..
Mitglied: colinardo
07.03.2014, aktualisiert um 15:41 Uhr
Zitat von DanielBodensee:
Eine Frage habe ich noch...
Da ich diese Funktion wiederverwendbar machen will, möchte ich ein TimeOut als Parameter definieren. Wie kann ich eigentlich
die Sekunden (z.Bsp. 120) in die Zeitangabe für WaitForStatus umsetzen? Als Variable habe ich [int] vorgesehen, aber ich
brauche ja das Format xx:xx:xx?
Das was dort als Parameter eingefügt werden muss ist ein TimeSpan-Objekt
So kannst du Sekunden für den Parameter verwenden
[Timespan]::FromSeconds(10)
[-edit- oben ergänzt]

Ich denke es macht auch sinn abzufragen ob der Dienst überhaupt gestoppt werden kann?
Ja das hatte ich noch nicht berücksichtigt... [- edit - oben eingefügt]
Bitte warten ..
Mitglied: DanielBodensee
07.03.2014 um 17:16 Uhr
Hallo Uwe,

super, tausend Dank, das klappt perfekt

Viele Grüsse,
Daniel
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Batch: CPU-Auslastung eines Prozesses auslesen und als Variable definieren (3)

Frage von tralveller zum Thema Batch & Shell ...

Batch & Shell
gelöst Auslesen und Vergleichen Zweiter CSV Dateien Powershell (7)

Frage von Hainoon zum Thema Batch & Shell ...

Batch & Shell
gelöst Laufwerkgröße der Clients auslesen (6)

Frage von michi-ffm zum Thema Batch & Shell ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(2)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (22)

Frage von terminator zum Thema LAN, WAN, Wireless ...

Exchange Server
gelöst Migration Exchange 2007 zu 2013 - Public Folder teilweise weg (16)

Frage von Andy1987 zum Thema Exchange Server ...