Запустите PowerShell [System. windows .forms.messagebox] через командный файл без отображения окна cmd. - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь создать автоматизированный процесс, который будет очищать пользовательские данные при каждом входе в систему на ноутбуке. Основные части закончены, и я нахожусь в стадии полировки. У меня при запуске запускаются два пакетных файла, которые очищают пользовательские данные из профиля, в который они вошли, и оба они работают. Моя проблема связана с окном cmd, которое появляется за моим диалоговым окном (см. Рисунок).

cmd and dialogue box

Изучение того, как сделать этот блок cmd невидимым, привело меня к VBS. Я нашел решение для этого, но теперь диалоговое окно не отображается вообще. Я полагаю, что это, вероятно, потому, что сценарий VBS делает все windows приглашения невидимыми.

Суть в том, как мне заставить мое диалоговое окно появляться без открытия окна CMD с ним?

VBScript в настоящее время выполняется в общей папке запуска здесь:

C: \ ProgramData \ Microsoft \ Windows \ Меню Пуск \ Программы \ StartUp

Сценарий удаления:

@echo off

::Set color of script
color 0a

::Title
title Loaner data wipe
set userpreserve="Administrator,All Users,Default,Public,barfiej"

::All files and folders within the parent folders below will be deleted.
c:
del /S /F/ Q "C:\Users\%USERNAME%\AppData\Local\Microsoft\Outlook\*"
del /S /F/ Q "C:\Users\%USERNAME%\Contacts\*"
del /S /F/ Q "C:\Users\%USERNAME%\Desktop\*"
del /S /F/ Q "C:\Users\%USERNAME%\Documents\*"
del /S /F/ Q "C:\Users\%USERNAME%\Downloads\*"
del /S /F/ Q "C:\Users\%USERNAME%\Favorites\*"
del /S /F/ Q "C:\Users\%USERNAME%\Links\*"
del /S /F/ Q "C:\Users\%USERNAME%\Music\*"
del /S /F/ Q "C:\Users\%USERNAME%\OneDrive\*"
del /S /F/ Q "C:\Users\%USERNAME%\OneDrive - Six Continents Hotels, Inc\*"
del /S /F/ Q "C:\Users\%USERNAME%\Pictures\*"
del /S /F/ Q "C:\Users\%USERNAME%\Saved Games\*"
del /S /F/ Q "C:\Users\%USERNAME%\Searches\*"
del /S /F/ Q "C:\Users\%USERNAME%\Videos\*"

::Clear credential manager
For /F "tokens=1,2 delims= " %G in ('cmdkey /list ^| findstr Target') do cmdkey /delete %H

Диалоговое окно cmd:

powershell -Command "Add-Type -AssemblyName System.Windows.Forms; C:\ProgramData\LoanerBatchFile\dialogue_box.ps1;"

dialog_box.ps1:

Add-Type -AssemblyName System.Windows.Forms

[System.windows.forms.messagebox]::show("Welcome to your loaner computer.

`nPlease keep the follow the following instructions while using the loaner laptop.

`n- Save all documents to OneDrive. Data is set to be removed from the user profile at each logoff

`n- Use Webmail

`n- Please keep the computer clean

`n- Be sure to return loaner when picking up your computer");

VBS скрипт:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\ProgramData\LoanerBatchFile\UserDataDeletion.bat" & Chr(34), 0
WshShell.Run chr(34) & objShell.Run("C:\ProgramData\LoanerBatchFile\dialogue.bat") & Chr(34), 0
Set WshShell = Nothing

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Как продолжение моего первоначального комментария выше.

Не проверено, потому что мне не на чем проверять эту концепцию, но примерно что-то вроде ...

Add-Type -AssemblyName System.Windows.Forms

& cmd.exe set userpreserve="Administrator,All Users,Default,Public,barfiej"

# All files and folders within the parent folders below will be deleted.

'C:\Users\%USERNAME%\AppData\Local\Microsoft\Outlook\*',
'C:\Users\%USERNAME%\Contacts\*',
'C:\Users\%USERNAME%\Desktop\*',
'C:\Users\%USERNAME%\Documents\*',
'C:\Users\%USERNAME%\Downloads\*',
'C:\Users\%USERNAME%\Favorites\*',
'C:\Users\%USERNAME%\Links\*',
'C:\Users\%USERNAME%\Music\*',
'C:\Users\%USERNAME%\OneDrive\*',
'C:\Users\%USERNAME%\OneDrive - Six Continents Hotels, Inc\*',
'C:\Users\%USERNAME%\Pictures\*',
'C:\Users\%USERNAME%\Saved Games\*',
'C:\Users\%USERNAME%\Searches\*',
'C:\Users\%USERNAME%\Videos\*' | 
ForEach { Remove-Item -Path $PSItem -Recurse -Force}

<#
https://docs.microsoft.com/en-us/archive/blogs/rmilne/script-to-clear-credman
#>

& cmd.exe For /F "tokens=1,2 delims= " %G in ('cmdkey /list ^| findstr Target') do cmdkey /delete %H

[System.windows.forms.messagebox]::show(
"Welcome to your loaner computer.
`nPlease keep the follow the following instructions while using the loaner laptop.
`n- Save all documents to OneDrive. Data is set to be removed from the user profile at each logoff
`n- Use Webmail
`n- Please keep the computer clean
`n- Be sure to return loaner when picking up your computer"
)

Опять же, поместите это в запланированное задание входа / запуска, назначенное RunOnce, или при входе в систему.

1 голос
/ 06 февраля 2020

Вы можете попробовать альтернативный способ:

$wsh = New-Object -ComObject Wscript.Shell 
[Void]$wsh.PopUp("Message content here")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...