[gelöst] Probleme beim ausführen eines PowerShell Scripts

Antworten
dl-gwit
Beiträge: 6
Registriert: 17 Jul 2019, 21:50

[gelöst] Probleme beim ausführen eines PowerShell Scripts

Beitrag von dl-gwit »

Hallo,

ich habe neu angefangen Scripte für meine Firma zu entwickeln.
Mit einem Script jedoch bin ich nicht ganz zufrieden.
Ich möchte gerne in einem PowerShell Script (PowerShell Console) den Close_Button "ausblenden"/Disablen.
Dies habe ich erfolgreich lösen können, doch OPSI (leider nur OPSI) bringt eine Fehlermeldung. (Hätte gerne Bilder geschickt nur Leider weiß ich hier nicht wie das geht sorry :roll:)

Hier ist der Code (ausschnitt) der die Fehlermeldung verursacht:

Code: Alles auswählen

function disable-Window {
try {
# Calling user32.dll methods for Windows and Menus
$MethodsCall = '
[DllImport("user32.dll")] public static extern long GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")] public static extern bool EnableMenuItem(long hMenuItem, long wIDEnableItem, long wEnable);
[DllImport("user32.dll")] public static extern long SetWindowLongPtr(long hWnd, long nIndex, long dwNewLong);
[DllImport("user32.dll")] public static extern bool EnableWindow(long hWnd, int bEnable);
'
# Create a new namespace for the Methods to be able to call them
Add-Type -MemberDefinition $MethodsCall -name NativeMethods -namespace Win32
 
# WM_SYSCOMMAND Message
$MF_DISABLED = 0x00000002L
$MF_ENABLED = 0x00000000L
#... http://msdn.microsoft.com/en-us/library/windows/desktop/ms647636(v=vs.85).aspx
 
$SC_CLOSE = 0xF060
#... http://msdn.microsoft.com/en-us/library/windows/desktop/ms646360(v=vs.85).aspx
 
# Extended Window Styles
$WS_EX_DLGMODALFRAME = 0x00000001L
$WS_EX_STATICEDGE = 0x00020000L
$WS_EX_TRANSPARENT = 0x00000020L
$WS_EX_LAYERED = 0x00080000
#... http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx
 
# Get window handle of Powershell process
$PSWindow = (Get-Process -Id $PID)
$hwnd = $PSWindow.MainWindowHandle
 
# Get System menu of windows handled
$hMenu = [Win32.NativeMethods]::GetSystemMenu($hwnd, 0)
 
# Window Style : TOOLWINDOW
[Win32.NativeMethods]::SetWindowLongPtr($hwnd, $GWL_EXSTYLE, $WS_EX_TOOLWINDOW) | Out-Null
 
# Disable X Button Window itself
[Win32.NativeMethods]::EnableMenuItem($hMenu, $SC_CLOSE, $MF_DISABLED) | Out-Null
# Disable Window itself
[Win32.NativeMethods]::EnableWindow($hwnd, 0) | Out-Null
}catch{}
banner
}
Mit diesem Code konnte ich Erfolgreich unter Windows 7 und Widnows 10 den Close_Button ausschalten. (außer wenn ich es über den OPSI ausführe)
Vielen Dank schon Mal. :D
Zuletzt geändert von dl-gwit am 18 Apr 2020, 12:38, insgesamt 1-mal geändert.
Benutzeravatar
tobias
Beiträge: 1291
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Probleme beim ausführen eines PowerShell Scripts

Beitrag von tobias »

Moin,

was passiert denn wenn du es via OPSI ausführst.

Das Problem bei manchen PowerShell Befehlen: Sie gibt es nur im Userkontext und nicht im Systemkontext in dem OPSI nunmal läuft.


Gruß
Tobias
dl-gwit
Beiträge: 6
Registriert: 17 Jul 2019, 21:50

Re: Probleme beim ausführen eines PowerShell Scripts

Beitrag von dl-gwit »

Ich muss leider korrigieren es kommt überhaupt keine Fehlermeldung (nicht in PowerShell weder noch im OPSI)
was passiert denn wenn du es via OPSI ausführst.
Vielen Dank erstmal für deine Antwort.

Hier ist ein Bild der Fehlermeldung:
https://imgur.com/a/LFAqzWq

Wenn ich das Script ausführe sollte eigentlich der Close_Button abgeschaltet werden.
Dies trifft leider nicht zu.
Stattdessen überspringt OPSI einfach diese Funktion und beginnt lieber mit der nächsten Funktion in meinem PowerShell Script.
Aber ein anderer Teil des Scripts Funktioniert, nämlich der Teil an dem das Script in einer neuen Instanz verschoben wir und vom Benutzer nicht verändert werden kann (also so das alle Benutzer kein Zugriff auf die Consolenanwendung haben und bsp.: nichtmal das Fenster verschieben können).

Dieser Teil funktioniert nicht:

Code: Alles auswählen

# Disable X Button Window itself
[Win32.NativeMethods]::EnableMenuItem($hMenu, $SC_CLOSE, $MF_DISABLED) | Out-Null
Dieser Teil funktioniert:

Code: Alles auswählen

# Disable Window itself
[Win32.NativeMethods]::EnableWindow($hwnd, 0) | Out-Null
Benutzeravatar
tobias
Beiträge: 1291
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Probleme beim ausführen eines PowerShell Scripts

Beitrag von tobias »

Wie rufst du das script denn in winst auf?
dl-gwit
Beiträge: 6
Registriert: 17 Jul 2019, 21:50

Re: Probleme beim ausführen eines PowerShell Scripts

Beitrag von dl-gwit »

Dazu muss ich eine seperate Instanz öffnen dies erfolgt mit:

Code: Alles auswählen

DosBatch_PowerShell_script

[DosBatch_PowerShell_script]
@echo off
start powershell.exe -executionpolicy unrestricted -command %windir%\script.ps1
dl-gwit
Beiträge: 6
Registriert: 17 Jul 2019, 21:50

Re: Probleme beim ausführen eines PowerShell Scripts

Beitrag von dl-gwit »

Also für alle die, die Lösung wissen möchten.
Ich habe alles in mein Powershell Script geschrieben und dem OPSi einfach gesagt, er soll dieses ausführen.
Falls man aber kein Script als .PS1-Datei abspreichern möchte, kann man sich mit Powershell auch einen OneLiner schreiben, hier mal ein Link wie ich das über mein Repository (in Github) gemacht habe:

https://github.com/Crypt2Shell/WinGrade
Benutzeravatar
SisterOfMercy
Beiträge: 1522
Registriert: 22 Jun 2012, 19:18

Re: Probleme beim ausführen eines PowerShell Scripts

Beitrag von SisterOfMercy »

What's all that for? I mean, it seems like a complicated way to set update settings an other registry keys. :?:
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
Antworten