Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Автоматизировать отключение и включение оборудования (http://forum.oszone.net/showthread.php?t=356172)

Wicked43 04-03-2025 14:11 3036418

Автоматизировать отключение и включение оборудования
 
Здравствуйте. Сразу скажу что я далек от темы программирования и прошу простить за предстоящие глупые вопросы.
Суть собственно вот в чем. Нужно при старте системы отключить и подключить оборудование например с айди USB\VID_0955&PID_9000. И все.
Желательно в свернутом виде виде без всплывающих окон командных строк (но это необязательно)

DJ Mogarych 04-03-2025 15:13 3036422

Почитайте про команды Powershell
Get-PnpDevice - получение информации об устройствах
Disable-PnpDevice - отключение
Enable-PnpDevice - включение

Wicked43 06-03-2025 08:49 3036471

Получилось решить так

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
-Confirm:$false
}
disable-PnpDevice -InstanceId 'HDAUDIO\FUNC_01&VEN_10EC&DEV_0897&SUBSYS_14629D48&REV_1005\4&E112F93&0&0001' -Confirm:$false
enable-PnpDevice -InstanceId 'HDAUDIO\FUNC_01&VEN_10EC&DEV_0897&SUBSYS_14629D48&REV_1005\4&E112F93&0&0001' -Confirm:$false

Осталось решить как это хозяйство запускать незаметно. С атрибутом -WindowStyle Hidden окно все равно появляется на секунду

Anton04 06-03-2025 09:13 3036474

Цитата:

Цитата Wicked43
Осталось решить как это хозяйство запускать незаметно. »

Банально от другой учётной записи посредством планировщика задач.

DJ Mogarych 06-03-2025 12:55 3036477

Костыль скрытого запуска .ps1 через .vbs
Код:

command = "powershell.exe -nologo -command C:\temp\script.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0


YuS_2 06-03-2025 15:47 3036478

Цитата:

Цитата Wicked43
Осталось решить как это хозяйство запускать незаметно. »

ещё вариант:
C#
hide.exe
Код:

using System;
using System.Diagnostics;
using System.Windows;

namespace hide
{
    class Program
    {
        static void Main(string[] args)
        {
            string st = "", ar = "";
            if (args.Length == 0)
                MessageBox.Show("фигассе, а параметры кто будет задавать?:)");
            else
            {
                st = args[0];
                for (int i = 1; i < args.Length; i++) {
                    ar += " " + args[i];
                }

                ProcessStartInfo startInfo = new ProcessStartInfo
                {
                    FileName = st,
                    WindowStyle = ProcessWindowStyle.Hidden,
                    //аргументы
                    Arguments = ar
                };
                //запуск процесса
                Process.Start(startInfo);
          }
        }
    }
}

Пример запуска с параметрами:
Код:

d:\TEST1\hide.exe powershell.exe -c "d:\TEST1\script.ps1 -d 'Intel(R) Ethernet Connection (11) I219-V'"
- использовать в батниках лучше с абсолютными путями, т.к. при запуске от имени администратора текущий каталог изменяется.

ЗЫ Если будут проблемки с компиляцией, могу помочь...

а это скрипт, с возможностью автоопределения, что требуется сделать с устройством (выкл/вкл), если не указывать значение аргумента -type:
powershell
script.ps1
Код:

param([string]$device,[string]$type)

# если запущен не от имени админа:
if (
        !([security.principal.windowsprincipal]`
        [security.principal.windowsidentity]::getcurrent()).isinrole([security.principal.windowsbuiltinrole]`
        "Administrator")
) {
    saps powershell.exe "-nop -exe Bypass -f `"$PSCommandPath`" -dev `"$device`" -t `"$type`"" -verb RunAs
    exit
}

# получаем устройство:
$d = get-pnpdevice |?{$_.friendlyname -like $device -or $_.instanceid -like $device}
$d

# автовыбор противоположного действия текущему состоянию:
if($type -ne "enable" -and $type -ne "disable") {
    if($d.status -eq 'OK') {$type = "disable"}else {$type = "enable"}
}

if ($type -eq "enable") {
    "Включаем $($d.friendlyname)"
    $d | enable-pnpdevice -confirm:$false
} elseif ($type -eq "disable") {
    "Выключаем $($d.friendlyname)"
    $d | disable-pnpdevice -confirm:$false
}
sleep -s 2

- устройство можно задавать как по friendlyname, так и по instanceid

YuS_2 06-03-2025 20:30 3036485

Вложений: 1
А это скомпилированный файлик (для Net Framework 4.8.1)
Файл 170601


Время: 03:47.

Время: 03:47.
© OSzone.net 2001-