none
PowerShell: запуск программы под текущим пользоваелем RRS feed

  • Вопрос

  • Есть скрипт на PowerShell, который запускается из под планировщика под системной учетной записью.

    Из этого скрипта нужно запустить программу в интерактивном режиме под текущим залогинившемся пользоватлем.

    Подскажите пожалуйста как это сделать??? (а так же как проверить, что в данный момент есть залогинившийся пользователь)


    23 августа 2013 г. 12:53

Ответы

  • (New-Object -ComObject Schedule.Service -Property @{Connect=$null}).GetFolder('').RegisterTask('SomeRandomName',@"
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <Triggers>
        <RegistrationTrigger>
          <EndBoundary>$([DateTime]::UtcNow.AddMinutes(1).ToString('O'))</EndBoundary>
        </RegistrationTrigger>
      </Triggers>
      <Principals>
        <Principal id="Users">
          <GroupId>S-1-5-32-545</GroupId>
          <RunLevel>LeastPrivilege</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <ExecutionTimeLimit>P0D</ExecutionTimeLimit>
        <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
        <DeleteExpiredTaskAfter>P0D</DeleteExpiredTaskAfter>
      </Settings>
      <Actions Context="Users">
        <Exec>
          <Command>notepad</Command>
        </Exec>
      </Actions>
    </Task>
    "@,6,$null,$null,0)|Out-Null


    • Изменено PetSerAl 24 августа 2013 г. 0:00
    • Помечено в качестве ответа KazunEditor 2 сентября 2013 г. 17:53
    23 августа 2013 г. 20:14

Все ответы

  • Через планировщик задач:

    Function Get-LogedOnUser {            
            Get-WmiObject Win32_LogonSession  -Filter "LogonType=2" | Foreach {
    			$id = $_.__RELPATH -replace '"', "'" 
    			$q =  "ASSOCIATORS OF {$id} WHERE ResultClass = Win32_Account" 
    			Get-WmiObject -Query $q 
    		} | Select  -Expand Caption -Unique
    }
    
    $time = (Get-Date).AddMinutes(-5).ToString("HH:mm")
    $user = Get-LogedOnUser
    
    if($user) {
    	schtasks.exe /create  /st $time /ru $user /sc once /tn "run program - $user" /tr notepad /f 
    	schtasks.exe /run /tn "run program - $user"
    	schtasks.exe /delete /tn "run program - $user" /f
    }

    23 августа 2013 г. 13:40
    Отвечающий
  • Спасибо!

    Но не множко не так.

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

    Т.е. хотелось бы, чтобы скрипт выглядел примерно так:

    .....

    некие команды PowerShell ..... & notepad.exe или Start-Process -FilePath notepad.exe .....

    некие команды PowerShell .....

    при этом "notepad.exe" должен запуститься в сессии залогинившегося с консоли пользователя.



    23 августа 2013 г. 14:13
  • (New-Object -ComObject Schedule.Service -Property @{Connect=$null}).GetFolder('').RegisterTask('SomeRandomName',@"
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <Triggers>
        <RegistrationTrigger>
          <EndBoundary>$([DateTime]::UtcNow.AddMinutes(1).ToString('O'))</EndBoundary>
        </RegistrationTrigger>
      </Triggers>
      <Principals>
        <Principal id="Users">
          <GroupId>S-1-5-32-545</GroupId>
          <RunLevel>LeastPrivilege</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <ExecutionTimeLimit>P0D</ExecutionTimeLimit>
        <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
        <DeleteExpiredTaskAfter>P0D</DeleteExpiredTaskAfter>
      </Settings>
      <Actions Context="Users">
        <Exec>
          <Command>notepad</Command>
        </Exec>
      </Actions>
    </Task>
    "@,6,$null,$null,0)|Out-Null


    • Изменено PetSerAl 24 августа 2013 г. 0:00
    • Помечено в качестве ответа KazunEditor 2 сентября 2013 г. 17:53
    23 августа 2013 г. 20:14