Я хочу написать сценарий, который убьет все процессы, исполняемые файлы которых подписаны определенным органом. Я знаю, как получить список запущенных процессов и как отфильтровать отфильтрованный список для уничтожения. (Get-Process и Stop-Process , соответственно.) Но я не знаю, как эффективно получать информацию о цифровой подписи для каждого процесса или фильтровать в соответствии с этой подписью.

Я предполагаю, что шаги будут примерно такими:

  1. Получить список всех процессов.
  2. Используйте другой командлет, чтобы получить цифровую подпись каждого процесса.
  3. Используйте данные из шага 2 для фильтрации по органу подписи.
  4. Отправить отфильтрованный список в Stop-Process.

Тем не менее, это кажется немного неэффективным, так как я хотел бы избегать выполнения команд во всех процессах больше, чем нужно. (например, было бы неплохо сделать шаги 2 и / или 3 частью шага 1). Кроме того, я просто не знаю, как сделать шаг 2.

Итак, по сути, у меня есть два вопроса здесь:

  1. Как получить информацию о цифровой подписи для исполняемых файлов, связанных с запущенными в данный момент процессами, способом, который можно использовать для фильтрации списка?
  2. Есть ли способ сделать # 1 без вызова отдельного командлета после Get-Process? (Например, просто просматривая свойства объектов, предоставляемых Get-Process.)

Текущая среда использует PowerShell 4.0 на Windows 7 SP1. Замечания о обратной / прямой совместимости для данных решений приветствуются.

1 ответ1

0

Это убьет все, что подписано Valve чтобы увеличить вашу производительность:

Get-Process | Where-Object {
    (
         Get-AuthenticodeSignature -FilePath $_.MainModule.FileName
    ).SignerCertificate.Subject -like 'CN=Valve*'
} | Stop-Process

Get-AuthenticodeSignature доступен для PS 3.0 и выше. В качестве альтернативы, вы можете попытаться разобрать вывод Sigcheck : Command, чтобы получить имя подписавшего из .exe

Есть ли способ сделать # 1 без вызова отдельного командлета после Get-Process? (Например, просто просматривая свойства объектов, предоставляемых Get-Process.)

Я так не думаю, потому что Система.Диагностика.ProcessModule не имеет свойств, которые указывают на подписи authenticode.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .