Показать полную графическую версию : Автоматизировать отключение и включение оборудования
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 окно все равно появляется на секунду
Осталось решить как это хозяйство запускать незаметно. »
Банально от другой учётной записи посредством планировщика задач.
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
Осталось решить как это хозяйство запускать незаметно. »
ещё вариант:
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
А это скомпилированный файлик (для Net Framework 4.8.1)
170601
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.