Как вставить информацию о прерывании или последовательности ключей в PowerShell
Я пытаюсь запустить netmon на нескольких машинах, я могу запустить netmon, что выглядит нормально. Однако, когда я выпускаю Stop-Job *
похоже, что netmon не закрывается правильно, что делает перехват пакетов бесполезным. NETmon ожидает "Ctrl + C", есть ли способ выдать это, когда я прекращаю работу? Netmon может использовать другие последовательности клавиш, используя параметр /stopwhen /keypress
$server = get-content C:\Server.txt
$capturedevice = "CAPTUREMACHINE"
foreach ($server in $server)
{ $scriptBlockContent = { param ($servername)
Nmcap /capture /network * /file C:\temp\"$servername".chn:400MB }
Invoke-Command -ComputerName $server -Scriptblock $scriptBlockContent -ArgumentList $server -AsJob }
foreach ($capturedevice in $capturedevice){ $scriptBlockContent =
{ param ($capturedevicename) Nmcap /capture /network * /file D:\temp\"$capturedevicename".chn:400MB }
Invoke-Command -ComputerName $capturedevice -Scriptblock $scriptBlockContent -ArgumentList $capturedevice -AsJob }
1 ответ
У меня нет готового решения для вас, но вот немного пищи для размышлений.
У вас есть 2 вопроса для решения:
Вы должны грациозно закрыть
Nmcap
процесс, чтобы он мог сохранить файл захвата.Вы можете попробовать пойти с
Start-Process
:$nmcap = Start-Process -FilePath "Nmcap" -ArgumentList "/capture /network * /file C:\temp\"$servername".chn:400MB" $nmcap.Close() #or $nmcap.CloseMainWindow() $nmcap.WaitForExit()
Или, если код выше не будет работать с помощью
$nmcap.Close()
или же$nmcap.CloseMainWindow()
, затем вы пытаетесь отправить Ctrl+C наNmcap
:$Wasp = Add-Type -MemberDefinition @' [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetForegroundWindow(IntPtr hWnd); '@ -Passthru $null = Add-Type -Assembly System.Windows.Forms if($Wasp::SetForegroundWindow($nmcap.MainWindowHandle)) { [System.Windows.Forms.SendKeys]::SendWait("^C") $nmcap.WaitForExit() }
- Если ничего не получится, вы можете попробовать принять решение C#: программная остановка приложений командной строки с помощью события Ctrl-C из.Net - рабочая демонстрация
Грациозно закрыть
Nmcap
процесс, который вы должны обнаружить внутри задания, когда PowerShell пытается остановить это задание.- Основанный на файлах подход: как правильно остановить асинхронное задание в PowerShell
- Подход на основе событий: мониторинг заданий в сеансе PowerShell из другого сеанса PowerShell. Но вам придется изменить код и отправить сигнал на работу, я не пробовал, поэтому я не знаю, возможно ли это.