Probleme beim ausführen eines PowerShell Scripts

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

Probleme beim ausführen eines PowerShell Scripts

Beitragvon dl-gwit » 17 Jul 2019, 22:03

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

Benutzeravatar
tobias
Beiträge: 1224
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Probleme beim ausführen eines PowerShell Scripts

Beitragvon tobias » 18 Jul 2019, 07:59

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
Veröffentliche deine WINST Scripte im OPSI Wiki und leiste so einen wertvollen Beitrag für die Community !!!
https://forum.opsi.org/wiki/

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

Re: Probleme beim ausführen eines PowerShell Scripts

Beitragvon dl-gwit » 18 Jul 2019, 18:57

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: 1224
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Probleme beim ausführen eines PowerShell Scripts

Beitragvon tobias » 19 Jul 2019, 11:40

Wie rufst du das script denn in winst auf?
Veröffentliche deine WINST Scripte im OPSI Wiki und leiste so einen wertvollen Beitrag für die Community !!!
https://forum.opsi.org/wiki/

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

Re: Probleme beim ausführen eines PowerShell Scripts

Beitragvon dl-gwit » 22 Aug 2019, 08:59

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


Zuletzt als neu markiert von dl-gwit am 22 Aug 2019, 08:59.