none
Запуск powershell скрипта при логине пользователя через remoteapp RRS feed

  • Вопрос

  • Добрый день!

    Подскажите как реализовать выполнение powershell-скрипта на сервере при подключении пользователем через remoteapp?

    23 января 2019 г. 13:43

Ответы

Все ответы

  • Если я правильно понял, то как вариант использовать Logon Script через GPO. Смотря конечно, для чего? Может быть вашу задачу можно решить иначе?
    • Изменено avalanche714 23 января 2019 г. 15:45
    23 января 2019 г. 15:45
  • есть разные варианты решения среди которых в сам remoteapp (cmd скрипт можно запихнуть 2 команды : выполнение скрипта и запуск программы.

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

    вариантов уйма, вопрос в задаче


    The opinion expressed by me is not an official position of Microsoft

    23 января 2019 г. 16:33
    Модератор
  • Необходимо чтобы пользователю при каждом запуске remoteapp выдавалось сообщение о сроке действия его аккаунта.

    Собственно такой вот скрипт powershell:

    Import-Module activedirectory
    $user = [Environment]::UserName
    $time = get-aduser $user -Properties accountExpires | select {[DateTime]::FromFileTime($_.accountExpires)} | Out-String 
    $time = $time.Replace("-", "") 
    $time = $time.Split(")")[1] 
    $time = $time.trimStart() 
    $time = $time.trimEnd() 
    $time = $time.Remove(11) 
    $rdate = Get-Date 
    $ddate = Get-Date $time 
    $fdate = $ddate-$rdate 
    $cdate = 14 
    if ($fdate.Days -le $cdate) 
    Add-Type -AssemblyName PresentationCore,PresentationFramework
    [System.Windows.MessageBox]::Show("$ddate у вас заканчивается срок действия учетной записи.",'Information',[System.Windows.MessageBoxButton]::OK,[System.Windows.MessageBoxImage]::Warning)
    }

    он выводит сообщение пользователю за 14 дней до конца действия аккаунта.

    Я пробовал через GPO, но скрипт не отрабатывает, так же пробовал сделать его запуск через батник, но тоже не помогло.

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -file ".\01.ps1"

    Собственно весь вопрос именно в этом.


    • Изменено Aki Lar 24 января 2019 г. 5:39
    24 января 2019 г. 5:38
  • Так эту же задачу решает сама ОС - она сигнализирует когда действие пароля заканчивается. Также можно написать простой скрипт, который эту информацию будет присылать на почту (например за 14,7,1 день до окончания).

    Почему вы хотите именно на RemoteApp завязать это оповещение?

    24 января 2019 г. 5:55

  • %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -file ".\01.ps1"

    ваш скрипт лежит в systemroot\system32? если нет, то скрипт работать и не должен. указывайте правильные пути. запус поша из батфайла это интересно, есть в этом какой-то фетиш

    через какое гпо пробовали и как знаете что не отрабатывает? дебажили?


    The opinion expressed by me is not an official position of Microsoft

    24 января 2019 г. 6:43
    Модератор
  • Почему вы хотите именно на RemoteApp завязать это оповещение?

    Нужно именно время действия аккаунта, а не пароля.
    24 января 2019 г. 6:45
  • Необходимо чтобы пользователю при каждом запуске remoteapp выдавалось сообщение о сроке действия его аккаунта.

    Собственно такой вот скрипт powershell:

    Import-Module activedirectory
    $user = [Environment]::UserName
    $time = get-aduser $user -Properties accountExpires | select {[DateTime]::FromFileTime($_.accountExpires)} | Out-String 
    $time = $time.Replace("-", "") 
    $time = $time.Split(")")[1] 
    $time = $time.trimStart() 
    $time = $time.trimEnd() 
    $time = $time.Remove(11) 
    $rdate = Get-Date 
    $ddate = Get-Date $time 
    $fdate = $ddate-$rdate 
    $cdate = 14 
    if ($fdate.Days -le $cdate) 
    Add-Type -AssemblyName PresentationCore,PresentationFramework
    [System.Windows.MessageBox]::Show("$ddate у вас заканчивается срок действия учетной записи.",'Information',[System.Windows.MessageBoxButton]::OK,[System.Windows.MessageBoxImage]::Warning)
    }

    он выводит сообщение пользователю за 14 дней до конца действия аккаунта.

    Я пробовал через GPO, но скрипт не отрабатывает, так же пробовал сделать его запуск через батник, но тоже не помогло.

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -file ".\01.ps1"

    Собственно весь вопрос именно в этом.


    вы скрипт руками на сервере выполняли под акаунтом пользюка?

     get-aduser не самый оптимальный путь решения вопроса так как на рядовых серверах без установки  activedirectory модуля этот командлет не отработает. лучше решать через ldap запрос.


    The opinion expressed by me is not an official position of Microsoft

    24 января 2019 г. 6:56
    Модератор

  • %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -file ".\01.ps1"

    ваш скрипт лежит в systemroot\system32? если нет, то скрипт работать и не должен. указывайте правильные пути. запус поша из батфайла это интересно, есть в этом какой-то фетиш

    через какое гпо пробовали и как знаете что не отрабатывает? дебажили?


    The opinion expressed by me is not an official position of Microsoft



    Да именно там и лежит, это уже как один из тестов. Запуск через батник так же ради теста. Пользователь (доменный админ), над которым ставились тесты вынесен в отдельную OU на которую добавлена политика (Конфигурация пользователя-Политики-Конфигурация Windows-Сценарии-Вход в систему) скрипты лежат в папке с политикой.

    Туда же добавлен обычный скрипт на логон

    echo %date% %time% %computername% %username% >> D:\Log\logons.txt

    Тоже не отрабатывает при запуске remoteapp, а при входе по rdp - отрабатывает.


    • Изменено Aki Lar 24 января 2019 г. 6:57
    24 января 2019 г. 6:56
  • что насчет шедульной задачи на событие?

    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа Aki Lar 25 января 2019 г. 14:39
    24 января 2019 г. 6:58
    Модератор
  • вы скрипт руками на сервере выполняли под акаунтом пользюка?

    get-aduser не самый оптимальный путь решения вопроса так как на рядовых серверах без установки  activedirectory модуля этот командлет не отработает. лучше решать через ldap запрос.


    The opinion expressed by me is not an official position of Microsoft

    Да под пользователем все отлично выводит, сервер и есть контроллер домена.
    24 января 2019 г. 7:00
  • Странно, по крайней мере у нас Logon Script отрабатывает.Скрипт лежит в DFS шаре.

    В журналах  какая-либо информация имеется при запуске RemoteApp?

    Как вариант посмотрите здесь? Не поможет ли в вам в решении.

    https://social.technet.microsoft.com/Forums/windowsserver/en-US/2da7c780-0c5c-45d7-bd4c-febbe213206b/starting-batch-script-with-remoteapps?forum=winserverTS

    24 января 2019 г. 7:28
  • что насчет шедульной задачи на событие?

    The opinion expressed by me is not an official position of Microsoft

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

    Ещё вопрос уже не по теме, можно как-то избавиться от окна psh на фоне? Чтобы только приложение выводилось.

    • Изменено Aki Lar 25 января 2019 г. 13:13 update
    25 января 2019 г. 13:11
  • что насчет шедульной задачи на событие?


    The opinion expressed by me is not an official position of Microsoft

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

    обращайтесь :) 

    тут вам всегда предложат набор лучших костылей на любой вкус :-D


    The opinion expressed by me is not an official position of Microsoft

    25 января 2019 г. 13:14
    Модератор
  • что насчет шедульной задачи на событие?


    The opinion expressed by me is not an official position of Microsoft

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

    Ещё вопрос уже не по теме, можно как-то избавиться от окна psh на фоне? Чтобы только приложение выводилось.

    Может кому понадобиться, в начало скрипта добавить:
    $t = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);'
    add-type -name win -member $t -namespace native
    [native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0)
    Скрывает окно консоли после запуска, оставляя уведомление

    • Изменено Aki Lar 25 января 2019 г. 14:41
    25 января 2019 г. 14:40