Как запустить приложение в существующем сеансе

5089
TwistedTech

Когда запускается запланированное задание, я хотел бы открыть окно Powershell на своем рабочем столе, чтобы отслеживать файл журнала и наблюдать за ходом выполнения. В частности, я хотел бы, чтобы задача открыть окно на моем рабочем столе и запустить Get-Content C:\LogFile.txt -Wait. Когда задача закончится, я бы хотел закрыть окно powershell.

Есть ли способ запустить графическое окно под другим пользователем? Из того, что я обнаружил, большинство команд будут запускаться с привилегиями указанного пользователя, но не будут создавать окна на своем рабочем столе.

Было бы еще лучше, если бы он запускался под любым пользователем, вошедшим в систему при запуске задачи, а не жестко закодированным пользователем.

РЕДАКТИРОВАТЬ: пока у меня есть код ниже. Я работаю до такой степени. Это создает хвостовое окно, но когда я $p.kill()его вызываю, оно убивает процесс psexec, но не процесс powershell. Могу ли я отправить Ctrl-Cв окно powershell?

# start tailing the log $psexec = 'c:\psexec.exe' $arguments = '-i powershell.exe -windowstyle maximized -command "& "' $p = start-process $psexec -argumentlist $arguments -passthru # start the task Some-task.exe # kill the tail $p.kill() 
2
Вы продолжаете говорить «Мне бы хотелось ...», как далеко вы продвинулись в этом сценарии? Единственная проблема / вопрос здесь - это запуск окна под другим пользователем? Wutnaut 10 лет назад 2
@Wutnaut Ну, у меня есть задача, которая запускает скрипт powershell и создает файл журнала. В настоящее время я просто открываю файл журнала вручную. TwistedTech 10 лет назад 0
@ Colyn1337 Я не пробовал много вещей, так как все, что я могу придумать, работает под привилегией учетной записи. Я не знаю, как запустить графическое окно под другим аккаунтом, поэтому я и спросил. TwistedTech 10 лет назад 0

1 ответ на вопрос

0
Colyn1337

First, you'll need PSExec.exe, it's free and provided by the sys internals group. You want a command similar to this:

psexec \\RemoteComputer "%systemroot%\system32\windowspowershell\v1.0\powershell.exe" -u username -p password -i -h 

Read the PSExec help file and play around with the settings. You'll be most interested in the '-i' switch as it's what indicates the session to interact with. Just using the '-i' without a session id (like in the example), psexec just chooses one. If there isn't one available, it'll use session 0.

You may even find that the New-PSSession and Enter-PSSession Powershell cmdlets are better suited to what you need. On your computer, run the following in powershell:

$Session = New-PSSession -ComputerName computer.domain.com Enter-PSSession -Session $Session 

When you run those commands, your terminal on your machine becomes the terminal on the remote machine. Commands you enter in the remote session are executed on the remote machine and the output is fed back to yours. When your done enter the Exit-PSSession command to return to your own session.

Итак, чтобы окно появилось на рабочем столе этого пользователя, мне нужно указать идентификатор сессии? Есть ли способ перечислить существующие сессии? TwistedTech 10 лет назад 0
@TwistedTech выполнение операций в чужой сессии - огромная ответственность. Существует определенный уровень знаний, необходимых для эффективного владения этой ответственностью. Потратьте некоторое время и исследуйте еще, прежде чем пытаться что-то вроде этого. Colyn1337 10 лет назад 1
Я знаю. Учетные записи являются служебными учетными записями для киосков. Я не беру на себя сеанс другого человека. (Кто-то еще добавил тег `session-hijacking`. Я не совсем согласен, что это то, что я пытаюсь сделать, но я все равно оставил его.) TwistedTech 10 лет назад 0
Несмотря на то, что удаленное взаимодействие с Powershell великолепно, я на самом деле хочу, чтобы окно появилось. Моя цель - иметь возможность посмотреть на экран киоска и проверить, где находится задание. Задача может занять до часа, и я хочу знать, что она делает, не открывая журнал на каждой машине. TwistedTech 10 лет назад 0
@TwistedTech, почему вы не можете просто контролировать состояние всех киосков с одного центрального компьютера? dangph 10 лет назад 2
@dangph Они есть, но в этой настройке люди на местах должны знать, что происходит. У них нет легкого доступа к центральному серверу. TwistedTech 10 лет назад 0