Popup erzeugen in Windows, dessen Inhalt nicht mitgeloggt wird
Moin.
Kurz und Knapp:
Sendet eine Bildschirmnachricht an alle Sitzungen. Der Inhalt (hier: "test") landet im Systemeventlog.
Wie erreiche ich das Selbe ohne dass es geloggt wird?
wird offenbar nicht geloggt, geht aber nicht an alle Sitzungen, sondern nur an die eigene - wie wäre dort die Syntax für "an alle"?
Kurz und Knapp:
msg * test
Wie erreiche ich das Selbe ohne dass es geloggt wird?
Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Hello World')
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 611175
Url: https://administrator.de/contentid/611175
Ausgedruckt am: 25.11.2024 um 01:11 Uhr
20 Kommentare
Neuester Kommentar
Zitat von @DerWoWusste:
Wenn ich das BalloonTest.ps1 mittels
starte, dann kommt der Output in der richtigen Session (hier: 6) an, aber es ist kein bleibendes Popup, was der Nutzer quittieren muss,
Bau dir halt stattdessen ein Powershell-Window mit Always-OnTop.Wenn ich das BalloonTest.ps1 mittels
psexec -s -i 6 powershell.exe D:\test\BalloonTest.ps1
https://www.windowspro.de/script/grafische-oberflaeche-gui-fuer-powershe ...
Das zweite setzt voraus, dass Import-Module RemoteDesktop funktioniert, was aber nicht überall gegeben ist - außer auf Terminalservern, da natürlich passend. Wäre schön, wenn es auf Clients ginge - wie installiere ich dort das Modul nach?
Über RSAThttps://www.windowspro.de/tipp/remotedesktop-modul-fuer-powershell-windo ...
Vermutlich gar nicht, ohne die SessionIDs auszulesen.
Jepp Session s auslesen und an psexec übergeben.
Servus DWW,
wenn es eine aktuelle Maschine ist (Windows 8.1/10/Server 2016/2019) kannst du die Benachrichtigung auch als modernen "Toast" an alle angemeldeten Benutzer hiermit abfeuern:
dem Toast kann man auch noch andere Dinge wie Logos, weitere Buttons etc. hinzufügen wenn man will, die Anzeigezeit lässt sich ebenso anpassen, und auch ob die Nachricht einen Reboot überleben soll. Details siehe https://docs.microsoft.com/en-us/uwp/api/windows.ui.notifications.toastn ...
Das ganze kann man zwar auch per Token Duplication und Impersonation machen, aber der Code wird dann doch um einiges länger , das sollte hier aber für deinen Zweck reichen.
Grüße Uwe
wenn es eine aktuelle Maschine ist (Windows 8.1/10/Server 2016/2019) kannst du die Benachrichtigung auch als modernen "Toast" an alle angemeldeten Benutzer hiermit abfeuern:
# title of toast message
$title = 'Test'
# message of toast
$message = 'Meine Nachricht'
# restart elevated if not
if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){
start powershell -Verb runas -ArgumentList '-File',$MyInvocation.MyCommand.Definition
exit
}
# create vbs wrapper for full silent operation
@"
CreateObject("WScript.Shell").Run "powershell.exe -EP Bypass -NoProfile -C ""[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime];`$xml = [xml]([Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02)).GetXML();`$xml.SelectSingleNode('/toast/visual/binding/text[@id=1]').InnerText = '$title';`$xml.SelectSingleNode('/toast/visual/binding/text[@id=2]').InnerText = '$message';`$cmds = `$xml.CreateElement('commands');`$cmd = `$xml.CreateElement('command');`$cmd.SetAttribute('id','dismiss');`$cmds.AppendChild(`$cmd);`$xml.DocumentElement.AppendChild(`$cmds);`$dom = New-Object Windows.Data.Xml.Dom.XmlDocument;`$dom.LoadXml(`$xml.OuterXml);[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('PowerShell').Show((New-Object Windows.UI.Notifications.ToastNotification `$dom -Property @{Tag = 'PowerShell';Group = 'PowerShell';ExpirationTime = [DateTimeOffset]::Now.AddHours(24);Priority = 'High'})) """,0,false
"@ | sc "C:\Users\Public\toast.vbs"
# create scheduled task to run vbs interactive in "Users" Group context
$task = Register-ScheduledTask -TaskName "ToastToAllUsers" -Action (New-ScheduledTaskAction -Execute "wscript" -Argument "C:\Users\Public\toast.vbs") -Principal (New-ScheduledTaskPrincipal -GroupId 'S-1-5-32-545')
# start scheduled task
$task | Start-ScheduledTask
# remove scheduled task
$task | Unregister-ScheduledTask -Confirm:$false
Das ganze kann man zwar auch per Token Duplication und Impersonation machen, aber der Code wird dann doch um einiges länger , das sollte hier aber für deinen Zweck reichen.
Grüße Uwe
Zitat von @DerWoWusste:
Ich finde auf den ersten Blick nicht, wie ich den Toast dauerhaft einblenden lasse, bis der Nutzer ihn quittiert. geht das überhaupt?
Da haben wir uns wohl missverstanden, mit Dauerhaft meinte ich in der "Toast-Notification-Area". Aber das obige kannst du ja mit einer beliebigen Powershell Form die sich dann eben nicht ausblendet. Wenn du willst mach ich dir dafür auch mal ein Beispiel etwa mit einer FullScreen Form.Ich finde auf den ersten Blick nicht, wie ich den Toast dauerhaft einblenden lasse, bis der Nutzer ihn quittiert. geht das überhaupt?
Den Fenster-Code habe ich mal Base64 kodiert eingebaut damit ich hier nicht escapen muss wie ein Wilder. Kann man natürlich auch über ne externe PS1 bauen wie man halt lustig ist ,
Hier nur als Ergänzung das was im Grunde im Base64 Code drin steht, ein FullScreen-Fenster ohne Rand mit Text und Button:
Sieht dann so aus
# message to show
$message = 'Donec commodo eget felis sed vehicula. Suspendisse pretium ultrices quam in iaculis. Aliquam a vulputate nisl.'
# restart elevated if not
if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){
start powershell -Verb runas -ArgumentList '-File',$MyInvocation.MyCommand.Definition
exit
}
# create vbs wrapper for silent operation
@"
CreateObject("WScript.Shell").Run "powershell.exe -EP Bypass -NoProfile -C iex ([System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('LntBZGQtVHlwZSAtQSAnU3lzdGVtLldpbmRvd3MuRm9ybXMnLCdTeXN0ZW0uRHJhd2luZyc7JGZvcm0gPSBOZXctT2JqZWN0IFN5c3RlbS5XaW5kb3dzLkZvcm1zLkZvcm0gLVByb3BlcnR5IEB7U2l6ZSA9ICcyMDAsMjAwJzs7V2luZG93U3RhdGUgPSAnTWF4aW1pemVkJztUb3BNb3N0ID0gJHRydWU7QmFja0NvbG9yID0gW1N5c3RlbS5EcmF3aW5nLkNvbG9yXTo6Qmx1ZTtDb250cm9sQm94ID0gJGZhbHNlO0Zvcm1Cb3JkZXJTdHlsZSA9J05vbmUnfTskdHh0SW5mbyA9IE5ldy1PYmplY3QgU3lzdGVtLldpbmRvd3MuRm9ybXMuTGFiZWwgLVByb3BlcnR5IEB7RG9jayA9IFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Eb2NrU3R5bGVdOjpGaWxsO1RleHRBbGlnbiA9ICdNaWRkbGVDZW50ZXInO0ZvbnQgPSBOZXctT2JqZWN0IFN5c3RlbS5EcmF3aW5nLkZvbnQoIkNhbGlicmkiLDI1LFtTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGVdOjpSZWd1bGFyKTtUZXh0ID0gJGFyZ3NbMF07Rm9yZUNvbG9yID0gW1N5c3RlbS5EcmF3aW5nLkNvbG9yXTo6V2hpdGU7U2l6ZSA9ICcyMDAsMjAwJ307JGJ0biA9IE5ldy1PYmplY3QgU3lzdGVtLldpbmRvd3MuRm9ybXMuQnV0dG9uIC1Qcm9wZXJ0eSBAe1NpemUgPSAnMTUwLDUwJztMb2NhdGlvbiA9ICcwLDAnO1RleHQgPSAnT0snO0ZvbnQgPSBOZXctT2JqZWN0IFN5c3RlbS5EcmF3aW5nLkZvbnQoIkNhbGlicmkiLDE1LFtTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGVdOjpCb2xkKTtGb3JlQ29sb3IgPSBbU3lzdGVtLkRyYXdpbmcuQ29sb3JdOjpXaGl0ZTtCYWNrQ29sb3IgPSBbU3lzdGVtLkRyYXdpbmcuQ29sb3JdOjpHcmVlbn07JGZvcm0uYWRkX0xvYWQoeyRidG4uTGVmdCA9IChbU3lzdGVtLldpbmRvd3MuRm9ybXMuU2NyZWVuXTo6UHJpbWFyeVNjcmVlbi5Cb3VuZHMuV2lkdGggLyAyKSAtICgkYnRuLldpZHRoLzIpOyRidG4uVG9wID0gW1N5c3RlbS5XaW5kb3dzLkZvcm1zLlNjcmVlbl06OlByaW1hcnlTY3JlZW4uQm91bmRzLkhlaWdodCAtIDIwMH0pOyRidG4uYWRkX0NsaWNrKHskZm9ybS5DbG9zZSgpfSk7JGZvcm0uQ29udHJvbHMuQWRkKCRidG4pOyRmb3JtLkNvbnRyb2xzLkFkZCgkdHh0SW5mbyk7JGZvcm0uU2hvd0RpYWxvZygpIHwgb3V0LW51bGx9')) + \""'$message'\"") """,0,false
"@ | sc "C:\Users\Public\toast.vbs"
# create scheduled task to run vbs interactive in "Users" Group context
$task = Register-ScheduledTask -TaskName "ToastToAllUsers" -Action (New-ScheduledTaskAction -Execute "wscript" -Argument "C:\Users\Public\toast.vbs") -Principal (New-ScheduledTaskPrincipal -GroupId 'S-1-5-32-545')
# start scheduled task
$task | Start-ScheduledTask
# remove scheduled task
$task | Unregister-ScheduledTask -Confirm:$false
Hier nur als Ergänzung das was im Grunde im Base64 Code drin steht, ein FullScreen-Fenster ohne Rand mit Text und Button:
Add-Type -A System.Windows.Forms
$form = New-Object System.Windows.Forms.Form -Property @{
Size = '200,200'
WindowState = 'Maximized'
TopMost = $true
BackColor = [System.Drawing.Color]::Blue
ControlBox = $false
FormBorderStyle ='None'
}
$txtInfo = New-Object System.Windows.Forms.Label -Property @{
Dock = [System.Windows.Forms.DockStyle]::Fill
TextAlign = 'MiddleCenter'
Font = New-Object System.Drawing.Font("Calibri",25,[System.Drawing.FontStyle]::Regular)
Text = "Donec commodo eget felis sed vehicula. Suspendisse pretium ultrices quam in iaculis. Aliquam a vulputate nisl. Etiam quam nunc, dictum ac nulla vel, posuere hendrerit metus. Quisque ante lacus, adipiscing id elit vel, ornare consectetur nisi. Etiam pretium, sapien vitae lobortis tempor, nibh justo cursus orci, non dapibus magna sapien quis enim. Phasellus rutrum elit justo, id pellentesque magna tempus dapibus. Etiam sed augue eros. Cras nec varius eros. Aenean sodales tincidunt dolor. Nunc ac metus tristique, porttitor justo eu, luctus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut egestas libero quis velit volutpat, at scelerisque mauris porttitor."
ForeColor = [System.Drawing.Color]::White
Size = '200,200'
}
$btn = New-Object System.Windows.Forms.Button -Property @{
Size = '150,50'
Location = '0,0'
Text = 'OK'
Font = New-Object System.Drawing.Font("Calibri",15,[System.Drawing.FontStyle]::Bold)
ForeColor = [System.Drawing.Color]::White
BackColor = [System.Drawing.Color]::Green
}
$form.add_Load({
$btn.Left = ([System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width / 2) - ($btn.Width/2)
$btn.Top = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height - 200
})
$btn.add_Click({
$form.Close()
})
$form.Controls.Add($btn)
$form.Controls.Add($txtInfo)
$form.ShowDialog() | out-null
Zitat von @DerWoWusste:
Hallo Uwe.
Ich möchte dir nochmals danken. Ich habe dich auch in meinem Artikel, wo ich das Skript einsetze, dankend verlinkt: https://www.experts-exchange.com/articles/33771/We-have-bitlocker-so-we- ...
Hallo Uwe.
Ich möchte dir nochmals danken. Ich habe dich auch in meinem Artikel, wo ich das Skript einsetze, dankend verlinkt: https://www.experts-exchange.com/articles/33771/We-have-bitlocker-so-we- ...
Hallo DWW, bin mal dem Link auf dem Tatschfon gefolgt und bekam den Bildschirm mit der Anzeige von "Continue Growing Your Skills and Your Career" vollgemüllt, so daß überhaupt kein Content zu sehen war. Im Browser am PC nimmt diese Banner/Popin immer noch die Hälfte des Fensters ein, so daß man außer der Überschrift des Artikels kaum was sieht.
Ich denke Ihr solltet Euer Design mal überarbeiten. So "verführt" Ihr die Leute nur, möglichst schnell die Seite wieder zuzumachen.
lks
Zitat von @DerWoWusste:
Ist nicht mein Forum. Aber im Handy kann ich den Banner wegschieben (kleiner Pfeil) und am PC sicher auch.
Werde das Feedback aber weitergeben und die darauf hinweisen, dass nicht jeder solche Pfeile versteht.
Ist nicht mein Forum. Aber im Handy kann ich den Banner wegschieben (kleiner Pfeil) und am PC sicher auch.
Werde das Feedback aber weitergeben und die darauf hinweisen, dass nicht jeder solche Pfeile versteht.
Daß man das wegschieben kann, ist mir schon klar, aber wenn ich erst etwas wegklicken muß, damit man das wichtige sieht, läuft etwas falsch.
lks