Запустите команду powershell от имени администратора с помощью пакетной переменной - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время у меня проблема с процессом, который застревает в диспетчере задач. Я устал заходить в диспетчер задач и заканчивать произвольное количество задач для моих пользователей. Я хотел бы упростить сценарий, который я настроил, чтобы не требовать размещения переменной в текстовом файле. Это то, что я сейчас настроил:

set curuser=Domain\%username%
powershell -noprofile -executionpolicy Bypass -command " '%curuser%' | Out-File -filepath C:\software\lynctemp.txt"
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""powershellscript.ps1""' -Verb RunAs}"
pause
del C:\software\lynctemp.txt
powershell -executionpolicy Bypass -command "start-process -filepath 'C:\Program Files (x86)\Microsoft Lync\communicator.exe'"

Сценарий powershell, который вызывается, буквально одна команда, но для него требуется переменная текущего пользователя. Я не мог придумать, как заставить работать переключатель «Запуск от имени», просто вызвав команду powershell. Вместо этого я создал текстовый файл для хранения переменной, а затем удаляю ее после ее использования. единственная проблема заключается в том, что я хотел бы просто передать переменную% curuser% прямо в вызов powershell, например:

powershell -noprofile -executionpolicy Bypass -command "get-process -includeUsername | Where-Object {$_.Username -eq %curuser% -and $_.processname -eq "communicator"} | Stop-Process -force" -verb runas

Причина, по которой я хочу это сделать, заключается в том, что, если она запускается дважды на тот же хост, текущий пользователь не будет текущим пользователем и его набор для сбоя.

Я также смотрел на taskkill.exe, но мне нужно убедиться, что он не просто завершает случайную задачу, потому что пользователи Используете общий хост RDS. поэтому, если я закончу задачу, она должна быть для этого пользователя. Если у кого-нибудь есть идеи по поводу лучшего способа исправления этой ошибки с помощью Microsoft Lyn c 2010, пожалуйста, дайте мне знать. я просто устанавливаю bandaid, когда он открывает 50 процессов коммуникатора, что делает программу непригодной для использования.

1 Ответ

0 голосов
/ 30 марта 2020

Привет! В итоге я нашел другое решение после того, как покопался в фильтре для taskkill.exe

set curuser=Domain\%username%
taskkill.exe /f /fi "USERNAME eq %curuser%" /im communicator.exe
ping pleasesleep.com
powershell -executionpolicy Bypass -command "start-process -filepath 'C:\Program Files (x86)\Microsoft Lync\communicator.exe'"

Я проверил его на своей локальной машине и собираюсь проверить завтра, когда поступят билеты.

Мне все еще любопытен мой начальный вопрос:

Если бы я действительно хотел передать параметры в скрипт powershell, который запускается от имени администратора, как бы я сделал это из пакетного файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...