Vraag over code in PowerShell script

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Eagle Creek
  • Registratie: Oktober 2002
  • Laatst online: 06-10 11:37

Eagle Creek

Breathing security

Topicstarter
Hi,

Korte uitleg:

Wij maken gebruik van Windows-servers waar per gebruiker met een apart account op wordt ingelogd.
KA: JansenW
Server: AdminJansenW

Het admin-account heeft niet per definitie administrator-rechten. Standaard logt het "AdminJansenW" account in met gebruikersrechten. Pas als een medewerker vooraf administrator-rechten heeft aangevraagd, krijgt het AdminJansenW-account ook administratorrechten op de betreffende server.

Het wil voorkomen dat medewerkers vergeten deze rechten aan te vragen, aan de slag gaan en er gaandeweg achterkomen dat zij de benodigde rechten missen. Daarom heb ik een Powershell script gemaakt dat na het inloggen kort toont of er wel of geen administratorrechten zijn.

Ik gebruik het volgende stuk code om een messagebox te tonen:
(is nog niet helemaal opgeruimd maar gaat om de werking)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Achterhaal of gebruiker administrator is
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    [Security.Principal.WindowsBuiltInRole] "Administrator"))
{
# Laad mogelijkheid tot weergeven foutboxen en verberg laadinformatie
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-null

# Toon melding en geef gebruiker de mogelijkheid om direct af te melden.
$oReturn=[System.Windows.Forms.MessageBox]::Show(" $env:username`n`n If you click YES, you will continue with your current (user) rights.","Continue $env:username without administrator rights?",[System.Windows.Forms.MessageBoxButtons]::YesNo,[System.Windows.Forms.MessageBoxIcon]::Question)  
switch ($oReturn){
    "Yes" {
        write-host "You pressed Yes"
        # Enter some code
    } 
    "No" {
        write-host "You pressed No"
        shutdown -l
    } 
}


Het probleem dat ik ervaar is dat de messagebox vaak achter het Powershellscherm verdwijnt. Dit is verwarrend voor gebruikers.

Wat zoekwerk leverde op dat dit in de praktijk inderdaad "soms" kan gebeuren. Daarom ben ik op zoek gegaan naar methoden om de MsgBox "on top" te tonen. Hierbij stuit ik echter alleen op VisualBasic-voorbeelden, zoals de volgende.

code:
1
2
3
Add-Type -AssemblyName Microsoft.VisualBasic

[Microsoft.VisualBasic.Interaction]::MsgBox('My message', 'YesNo,MsgBoxSetForeground,Information', 'MyTitle')


Bij Microsoft kwam ik de "Interaction.MsgBox Method" tegen (MSDN: Interaction.MsgBox Method (Microsoft.VisualBasic)) met de remark "MsgBoxSetForeground". Maar ook dit zit binnen de "Microsoft.VisualBasic"- assembly.

Ik gebruik echter geen VisualBasic om de MsgBox aan te roepen maar "System.Windows.Forms". Ik las ook dat VisualBasic vooral voor backwards compatability redenen in PS aanwezig is en niet de voorkeur geniet.

Daarom ben ik verder gaan zoeken binnen de "MessageBox Class" (MSDN: MessageBox Class (System.Windows.Forms)). Daar heb ik het volgende achterhaald:
code:
1
Show(IWin32Window, String)  Displays a message box in front of the specified object and with the specified text.


Gezien mijn bestaande script (bericht, titel, icoon, knoppen) denk ik dat ik het volgende nodig heb:
code:
1
Show(IWin32Window, String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)  Displays a message box in front of the specified object and with the specified text, caption, buttons, icon, and default button.


Ik weet echter niet hoe ik dit moet verwerken in mijn huidige script zodat de MsgBox altijd op de voorgrond staat.

Kan iemand hierin adviseren :)?

~ Information security professional & enthousiast ~ EC Twitter ~


Acties:
  • 0 Henk 'm!

  • roughtodacore
  • Registratie: Februari 2012
  • Laatst online: 09:15
de statement die de window naar de voorgrond drukt, in een while loop stoppen, waarbij de while loop pas stopt als het script stopt?

Alles kan, zolang het maar mogelijk is...


Acties:
  • 0 Henk 'm!

  • wazzzaaa
  • Registratie: Oktober 2007
  • Laatst online: 13-11-2020
hoe roep je het powershell script op ?
Kan je het powershell window verbergen of op een andere plaats op het scherm weergeven ?

Acties:
  • 0 Henk 'm!

  • Eagle Creek
  • Registratie: Oktober 2002
  • Laatst online: 06-10 11:37

Eagle Creek

Breathing security

Topicstarter
wazzzaaa schreef op donderdag 17 juli 2014 @ 12:16:
hoe roep je het powershell script op ?
Kan je het powershell window verbergen of op een andere plaats op het scherm weergeven ?
code:
1
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "& "D:\Program` Files` `(x86`)\Management\admincheck.ps1"

~ Information security professional & enthousiast ~ EC Twitter ~


Acties:
  • 0 Henk 'm!

  • roughtodacore
  • Registratie: Februari 2012
  • Laatst online: 09:15
http://stackoverflow.com/...-in-front-with-powershell

Schijnt dus een community-made cmdlet voor te bestaan. Als je deze in een while loop kan gooien zou het denk ik wel moeten werken.

Alles kan, zolang het maar mogelijk is...


Acties:
  • 0 Henk 'm!

  • anboni
  • Registratie: Maart 2004
  • Laatst online: 05-10 05:12
Misschien "-WindowStyle Hidden" toevoegen aan de aanroep? (bron: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -?" op mijn win7 systeem)

Acties:
  • 0 Henk 'm!

  • roughtodacore
  • Registratie: Februari 2012
  • Laatst online: 09:15
Hij wilt hem juist continue op de voorgrond hebben, of ben ik nu in de war? :P

Alles kan, zolang het maar mogelijk is...


Acties:
  • 0 Henk 'm!

  • Eagle Creek
  • Registratie: Oktober 2002
  • Laatst online: 06-10 11:37

Eagle Creek

Breathing security

Topicstarter
Heb nu het volgende toevoegd:

code:
1
2
3
4
# Probeer alle schermen te minimaliseren
[System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic") | out-null
$shell = New-Object -ComObject “Shell.Application”
$shell.MinimizeAll()


Dit werkt in ieder geval als ik het script handmatig start en de automatische start ga ik later proberen.
Ben hiermee al weer iets geholpen.

Idealiter zou ik na het tonen van de foutboodschap nog een "write-host" uitvoeren - daarvoor is het dus weer nodig dat het scherm terug in beeld komt. Ik ga eens kijken hoe ik dat doe.

Hoewel ik me afvraag of wat ik nu doe "de juiste methode" is, lijkt het te werken, waarvoor dank :).

~ Information security professional & enthousiast ~ EC Twitter ~


Acties:
  • 0 Henk 'm!

  • Proxx
  • Registratie: Juni 2008
  • Laatst online: 29-05-2024
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "& "D:\Program` Files` `(x86`)\Management\admincheck.ps1"
-WindowStyle Hidden

als er in de powershell console toch niks boeiends staat.

(verhelpt het voorgrond probleem misschien niet maar dat verwarrende zwartescherm is weg)

Proxx wijzigde deze reactie 31-07-2015 13:37 (1337%)


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Eagle Creek
  • Registratie: Oktober 2002
  • Laatst online: 06-10 11:37

Eagle Creek

Breathing security

Topicstarter
-nvm-

[ Voor 99% gewijzigd door Eagle Creek op 18-07-2014 22:05 ]

~ Information security professional & enthousiast ~ EC Twitter ~

Pagina: 1