Войти

Показать полную графическую версию : Автоматизировать отключение и включение оборудования


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

DJ Mogarych
04-03-2025, 15:13
Почитайте про команды Powershell
Get-PnpDevice - получение информации об устройствах
Disable-PnpDevice - отключение
Enable-PnpDevice - включение

Wicked43
06-03-2025, 08:49
Получилось решить так

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
Осталось решить как это хозяйство запускать незаметно. »

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

DJ Mogarych
06-03-2025, 12:55
Костыль скрытого запуска .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
Осталось решить как это хозяйство запускать незаметно. »
ещё вариант:
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
А это скомпилированный файлик (для Net Framework 4.8.1)
170601




© OSzone.net 2001-2012