mguenth83
Goto Top

Powershell bei Button X einen Befehl auführen

Hi,
hoffe Ihr könnt mir helfen. Ich habe ein Windows 7 X64 System und habe ein Script das den Befehl "Register-EngineEvent PowerShell.Exiting" beim drücken des "X" ausführt.

Ich möchte damit erreichen, dass wenn man das Script mit Gewalt per X beendet dieser noch einen aller letzten Befehl ausführt.

Er sollte dann diesen Befehl ausführen was verhindert das die Datei nicht schreibgeschützt bleibt.

Register-EngineEvent PowerShell.Exiting -SupportEvent -Action {(Get-ItemProperty "$env:windir\system32\Empirum\AgentConfig.xml").isReadOnly = $false}  

Das ganze funktioniert soweit in ISE aber nicht mit der Console....

Gruß
Matthias

Content-ID: 226341

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

Ausgedruckt am: 17.11.2024 um 05:11 Uhr

colinardo
colinardo 10.01.2014 aktualisiert um 18:20:13 Uhr
Goto Top
Hallo Matthias,
also hier geht es auch in einer Konsole einwandfrei. Eventuell stimmt was mit deinem Powershell-Profil nicht. Starte mal eine Konsole mit powershell.exe -noprofile und führe dann die Zeile darin aus.
Geht denn folgendes überhaupt in einer separaten Konsole?
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action {start-process "notepad.exe"}

Oder vermutlich schlägt das setzen des ReadOnly-Attributs fehl weil die Datei noch von deinem Script in Benutzung ist. Hier müsste man dann den jeweiligen Prozess erst beenden bzw. diesen vorher mit Start-Process starten, in einer Variablen speichern, und dann im Event den Prozess stoppen bevor man das Attribut setzt.

Grüße Uwe
mguenth83
mguenth83 10.01.2014 aktualisiert um 19:46:05 Uhr
Goto Top
Hi,
habe nochmal neu gestartet und es probiert. Leider funktioniert es immer noch nicht. Das komische ist das ich ein Menu erstellt habe im Script und wenn ich dort 1,2 oder 3 drücke dann die Befehle sich ausführen und dann sich das Script schließt funktioniert es. Sprich es funktioniert nur nicht wenn ich das X benutze.

Habe gerade den Fehler gefunden...es liegt im Menue...bzw wahrscheinlich an der Abfrage von Read-Host. Er wartet auf eine Eingabe und solange die nicht erfolgt ist wird es nicht funktionieren. Fragt sich wie man das ganze umgehen kann.
Hier mal der Code:
#Variablen für Mehrfachbenutzung#
#################################
$file = Get-ItemProperty "$env:windir\system32\Empirum\AgentConfig.xml"  
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action {(Get-ItemProperty "$env:windir\system32\Empirum\AgentConfig.xml").isReadOnly = $false}  
$Stop = Stop-Service -Name "eris" -Force -ErrorAction SilentlyContinue  
$Start = Start-Service -Name "eris" -ErrorAction SilentlyContinue  

# Bildschirm ‘leeren’
cls

# Das Auswahl-Menu
Write-Host “Was willst Du tun?”
Write-Host ” “
Write-Host “1. Kioskmode aktivieren”
Write-Host “2. Kioskmode beenden und Einstellungen rückgängig machen”
Write-Host "3. Dienst neustarten"  
Write-Host ” “

# Die einzige Variable
$a = Read-Host “Deine Wahl“

Write-Host ” ”

# switch-case | Auswahl Abfangen und Verarbeiten
switch ($a)
{
1
 {
#Service-Stoppen#
#################
$Stop

#XML Datei, Werte ändern#
#########################
(Get-Content -Path $file) -replace ('<Kiosk>false</Kiosk>','<Kiosk>true</Kiosk>') | Out-File $File  

#Datei schreibschutz aktivieren#
################################
$file.isReadOnly = $true

#Service-Starten#
#################
$Start

#Starten von Kioskmode#
####################
&"$env:windir\system32\Empirum\eris_ui.exe"  
}
}
colinardo
colinardo 10.01.2014 um 20:47:31 Uhr
Goto Top
Dir ist schon bewusst das das Event auch ausgeführt wird wenn die Konsole normal geschlossen wird ? D.h. nach dem setzen von ReadOnly und starten des Dienstes wird der Schreibschutz des Files wieder entfernt, wenn sich die Konsole schließt.

Entferne doch einfach schon vor dem Read-Host-Befehl präventiv den Schreibschutz des Files oder geht das nicht weil der Dienst da die Finger drauf hat ?
mguenth83
mguenth83 13.01.2014 um 12:21:53 Uhr
Goto Top
Hi,
leider hat der Dienst dort seine Finger im Spiel und somit geht das nicht..
Szenario ist das egal ob das Script so beendet wird oder über das X geschlossen wird soll der die Datei keinen Schreibschutz mehr haben.
Wie schon gesagt mit der ISE funktioniert´s...komischerweise nicht mit der Konsole...
colinardo
colinardo 13.01.2014 aktualisiert um 12:26:00 Uhr
Goto Top
aber wieso funktioniert dann das setzen des ReadOnly-Flags auf false wenn der Dienst läuft, und du die Konsole bzw. ISE schließt ?? das sollte dann ja auch nicht gehen...
mguenth83
mguenth83 13.01.2014 um 14:37:30 Uhr
Goto Top
Ehrlich gesagt weiß ich net ob dies funktioniert oder nicht...habe den Dienst nicht aufm Rechner....also kann auch sein das es geht...generell sollte es ja immer funktionieren weil der Dienst garnet installiert ist. Sprich nix kann die Datei blocken.