<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16837&amp;type=atom" />
	<updated>2021-12-27T23:11:29Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=16837</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151423#p151423" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>, приветствую !<br /></p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>помнится, в Win32_ComputerSystem.UserName будет имя пользователя, залогинившегося последним. Не факт, что им окажется пользователь, от чьего имени было вызвано &#039;Запуск от имени Администратора&#039;.</p></blockquote></div><p>А есть возможность проверить ? На ночь глядя никак не соображу как протестить этот кейс.</p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Коллеги, мне сдаётся, что проверять надо именно вариант «Пользователь, не обладающий административными привилегиями, вызывает &#039;Запуск от имени Администратора&#039;», а не «Администратор вызывает &#039;Запуск от имени Администратора&#039;» и не «Пользователь вызывает &#039;Запуск от имени другого пользователя&#039;».</p></blockquote></div><p>Перечитал раза 3, на третий раз дошло. Тонко подмечено.</p><p>А из ответов, которые по <a href="https://groups.google.com/g/microsoft.public.scripting.vbscript/c/CxN7LsK-xMQ?pli=1">ссылке</a> ничего подходящего нет ?</p><p>Там для сессий ещё какой-то такой код предлагают:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
strComputer = &quot;.&quot; &#039; &quot; use &quot;.&quot; for local computer

Set objWMI = GetObject(&quot;winmgmts:&quot; _
&amp; &quot;{impersonationLevel=impersonate}!\\&quot; _
&amp; strComputer &amp; &quot;\root\cimv2&quot;)
Set colSessions = objWMI.ExecQuery _
(&quot;Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10&quot;)

If colSessions.Count = 0 Then
    Wscript.Echo &quot;No interactive users found&quot;
Else
    For Each objSession in colSessions
        If objSession.LogonType = 2 Then
            WScript.Echo &quot;Logon type: Console&quot;
        Else
            WScript.Echo &quot;Logon type: RDP/Terminal Server&quot;
        End If
        Set colList = objWMI.ExecQuery(&quot;Associators of &quot; _
            &amp; &quot;{Win32_LogonSession.LogonId=&quot; &amp; objSession.LogonId &amp; &quot;} &quot; _
            &amp; &quot;Where AssocClass=Win32_LoggedOnUser Role=Dependent&quot; )

        For Each objItem in colList
            WScript.Echo &quot;User: &quot; &amp; objItem.Name
            WScript.Echo &quot;FullName: &quot; &amp; objItem.FullName
            WScript.Echo &quot;Domain: &quot; &amp; objItem.Domain
        Next
        Wscript.Echo &quot;Session start time: &quot; &amp; objSession.StartTime
        WScript.Echo
    Next
End If
</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2021-12-27T23:11:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151423#p151423</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151420#p151420" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>TAOSoft пишет:</cite><blockquote><p>ибо quser знает лишь, если мне память не изменяет , Win10 и Srv 2012 и более</p></blockquote></div><p>Как минимум, Windows 7 SP1 знает.</p><p><strong>Xameleon</strong>, помнится, в Win32_ComputerSystem.UserName будет имя пользователя, залогинившегося последним. Не факт, что им окажется пользователь, от чьего имени было вызвано &#039;Запуск от имени Администратора&#039;.</p><p>Коллеги, мне сдаётся, что проверять надо именно вариант «Пользователь, не обладающий административными привилегиями, вызывает &#039;Запуск от имени Администратора&#039;», а не «Администратор вызывает &#039;Запуск от имени Администратора&#039;» и не «Пользователь вызывает &#039;Запуск от имени другого пользователя&#039;».</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2021-12-27T22:18:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151420#p151420</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151416#p151416" />
			<content type="html"><![CDATA[<p><strong>TAOSoft</strong>, нашёл вот такой скрипт (немного сократил):<br /></p><div class="codebox"><pre><code>
Option Explicit
Dim objWMIService, colComputer, objComputer
Set objWMIService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2&quot;)
Set colComputer = objWMIService.ExecQuery(&quot;Select * from Win32_ComputerSystem&quot;)
For Each objComputer in colComputer
    Wscript.Echo objComputer.UserName
Next
</code></pre></div><p><a href="https://groups.google.com/g/microsoft.public.scripting.vbscript/c/CxN7LsK-xMQ?pli=1">cсылка</a></p><p>Последовал вашему предложению. Создал пользователя admin и запустил от его имени скрипт в консоли. Авторизован на компьютере как superuser. Вот что вижу в консоли:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p><span class="postimg"><img src="https://i.imgur.com/aZDBLPN.png" alt="https://i.imgur.com/aZDBLPN.png" /></span></p></div></div><p>P.S На той же странице в ответах приведены примеры кода на случай RDP сессий</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2021-12-27T19:09:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151416#p151416</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151414#p151414" />
			<content type="html"><![CDATA[<p><strong>TAOSoft</strong>, ознакомьтесь, пожалуйста, с <a href="https://forum.script-coding.com/misc.php?action=rules">Правилами</a>, отредактируйте свои посты. Обратите внимание на <a href="https://forum.script-coding.com/misc.php?action=rules#literacy">точки</a> в конце предложений.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-12-27T15:25:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151414#p151414</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151413#p151413" />
			<content type="html"><![CDATA[<p><strong>Rumata</strong><br />Ваше решение определяет права пользователя (RunAs) для которого повышение привилегий сделано. Я считаю , что этот юзер по умолчанию Админ.</p>]]></content>
			<author>
				<name><![CDATA[TAOSoft]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26905</uri>
			</author>
			<updated>2021-12-27T12:56:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151413#p151413</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151412#p151412" />
			<content type="html"><![CDATA[<p><strong>andypetr</strong></p><p>ну что-то в этом есть интересное, только лучше этими командами: query session или qwinsta. Ибо quser знает лишь, если мне память не изменяет , Win10 и Srv 2012 и более.</p><p>Но: 1) хотелось бы более элегантный вариант, без вызова сторонних утилит.<br />2) quser/query session/qwinsta CONSOLE не имеет значение при работе в терминале, возвращает пустое значение. Юзеры же, которые работают на терминале, обзываются сеансами типа rdp-tcp#XXX, поэтому вообще не понять кто из N-ого количества запустил на выполнение скрипт. А как следствие при выполнении скрипта, ему нужно определить в каком режиме работы выполняется сессия пользователя Console или rdp (переменная среды SESSIONNAME у пользователя с повышенными правами вообще отсутствует).</p>]]></content>
			<author>
				<name><![CDATA[TAOSoft]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26905</uri>
			</author>
			<updated>2021-12-27T12:31:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151412#p151412</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151409#p151409" />
			<content type="html"><![CDATA[<p><strong>TAOSoft</strong></p><p>Вариант с сайта coderoad:<br /><a href="https://coderoad.ru/20985756/Получить-текущее-имя-пользователя-вошедшего-в-систему">https://coderoad.ru/20985756/Получить-т … -в-систему</a></p><div class="codebox"><pre><code>Dim strCmd
    strCmd = &quot;cmd /q /c &quot;&quot;quser console | find /i &quot;&quot;console&quot;&quot; &quot;&quot; &quot;

Dim buffer 
    buffer = WScript.CreateObject(&quot;WScript.Shell&quot;).Exec(strCmd).StdOut.ReadAll()

Dim c, consoleUserName
    c = InStr(buffer,&quot;console&quot;)
    If c &gt; 2 Then
        consoleUserName = Trim(Mid(buffer,2,c-2))
    Else
        consoleUserName = &quot;&quot;
    End If

    WScript.Echo consoleUserName
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2021-12-27T05:19:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151409#p151409</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151406#p151406" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />можно слово домен вообще не брать в расчет, на локальной тачке создать User1 (входит в группу - Пользователи) и Admin (входит в - Администраторы). Залогинится под User1 и запустить скрипт от имени Admin. Точно такая же история будет</p>]]></content>
			<author>
				<name><![CDATA[TAOSoft]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26905</uri>
			</author>
			<updated>2021-12-27T04:53:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151406#p151406</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151405#p151405" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />Это было бы слишком просто. Данный вариант опять же показывает Админского юзера, т.е. юзера от имени которого запущен скрипт, но ни того, который залогинился (под чьей сессий произошел запуск).</p>]]></content>
			<author>
				<name><![CDATA[TAOSoft]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26905</uri>
			</author>
			<updated>2021-12-27T04:38:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151405#p151405</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151403#p151403" />
			<content type="html"><![CDATA[<p>Господа, приветствую. К сожалению, проверить на домене не имею возможности. Подскажите, пожалуйста, такой вариант тоже не подходит ?:</p><div class="codebox"><pre><code>
With CreateObject(&quot;WScript.Network&quot;)
    MsgBox .UserDomain &amp; &quot;\&quot; &amp; .UserName
End With
</code></pre></div><p>В принципе на 90% уверен, что раз вы использовали гораздо более сложные конструкции кода, то видимо этот простейший вариант явно не катит. Но вижу, что он не упомянут, поэтому всё же рискнул спросить.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2021-12-26T12:20:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151403#p151403</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151398#p151398" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>andypetr пишет:</cite><blockquote><p>USERDOMAIN_ROAMINGPROFILE</p></blockquote></div><p>Мне кажется, это малоинформативная переменная. <a href="https://ss64.com/nt/syntax-variables.html">На ss64</a> говорят, что она </p><div class="quotebox"><blockquote><p>The user domain for RDS or standard roaming profile paths.</p></blockquote></div><p> Например, у меня на рабочем компе ее значение совпадает с USERDOMAIN.</p><p>А вот переменная USERNAME указывает на одного и того же пользователя и в обычном режиме и в режиме с повышенными привелегиями.</p><p>В своем <a href="https://github.com/ildar-shaimordanov/cmd.scripts/blob/master/sudo.bat">батнике с громким названием sudo.bat</a> я использую такой код для проверки уровня привилегий:<br /></p><div class="codebox"><pre><code>
for /f &quot;tokens=3 delims=\ &quot; %%a in ( &#039;
	call &quot;%SystemRoot%\system32\whoami.exe&quot; /groups ^| findstr /b /c:&quot;Mandatory Label&quot;
&#039; ) do if /i &quot;%%~a&quot; == &quot;system&quot; (
	echo:system
) else if /i &quot;%%~a&quot; == &quot;high&quot; (
	echo:admin
) else if /i &quot;%%~a&quot; == &quot;medium&quot; (
	echo:user
) else (
	echo:others
)
</code></pre></div><p>Решение взято отсюда: <a href="https://stackoverflow.com/a/27717205/3627676">https://stackoverflow.com/a/27717205/3627676</a>.<br />Хотя утвержают (здесь - <a href="https://stackoverflow.com/a/30921854/3627676">https://stackoverflow.com/a/30921854/3627676</a>), что этот подход не является 100% надежным.</p><p>Видимо эта информация весьма ненадежная. Судя <a href="https://ab57.ru/cmdlist/whoami.html">по этой ссылке</a>, вывод может быть локализован.</p><p>Возможно, медитация над этим C#-кодом как-то поможет реализовать искомое на WSH. Возможно, и не поможет.<br /><a href="https://github.com/gerardog/gsudo/blob/master/src/gsudo/Helpers/ProcessHelper.cs#L142-L157">https://github.com/gerardog/gsudo/blob/ … #L142-L157</a><br /></p><div class="codebox"><pre><code>
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                _cacheIsAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
                return _cacheIsAdmin.Value;
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2021-12-25T07:53:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151398#p151398</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151378#p151378" />
			<content type="html"><![CDATA[<p><strong>alexii</strong></p><p>Увы, показывает Админского юзера, т.е. юзера от имени которого запущен скрипт, но ни того, который залогинился (под чьей сессий произошел запуск)</p>]]></content>
			<author>
				<name><![CDATA[TAOSoft]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26905</uri>
			</author>
			<updated>2021-12-24T09:19:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151378#p151378</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151339#p151339" />
			<content type="html"><![CDATA[<p>Попробуйте такой:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>Option Explicit


Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim strUserDomain
Dim strUserName

Set objSWbemServicesEx = WScript.CreateObject(&quot;WbemScripting.SWbemLocator&quot;).ConnectServer(&quot;.&quot;, &quot;root\cimv2&quot;)

For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery(&quot;SELECT * from Win32_Process WHERE ProcessID = &#039;&quot; &amp; CStr(GetScriptProcessID()) &amp; &quot;&#039;&quot;)
	objSWbemObjectEx.GetOwner strUserName, strUserDomain
	WScript.Echo strUserDomain &amp; &quot;\&quot; &amp; strUserName
Next

Set objSWbemServicesEx = Nothing

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Function GetScriptProcessID()
	With WScript.CreateObject(&quot;WScript.Shell&quot;).Exec( _
		&quot;&quot;&quot;mshta.exe&quot;&quot; &quot; &amp; _
		&quot;&quot;&quot;&lt;HTML&gt;&lt;HEAD&gt;&lt;HTA:APPLICATION APPLICATIONNAME=&#039;GetParentPID&#039; &quot; &amp; _
		&quot;WINDOWSTATE=&#039;minimize&#039; SHOWINTASKBAR=&#039;no&#039;&lt;/HEAD&gt;&lt;/HTML&gt;&quot;&quot;&quot; _
	)
		GetScriptProcessID = objSWbemServicesEx.Get(&quot;Win32_Process.Handle=&#039;&quot; &amp; CStr(.ProcessID) &amp; &quot;&#039;&quot;).ParentProcessID
		.Terminate
	End With
End Function
&#039;=============================================================================
</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2021-12-22T02:03:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151339#p151339</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WSH,VBS,JS: Как скриптом определить юзера, запустившего скрипт?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=151314#p151314" />
			<content type="html"><![CDATA[<p>Доброго времени суток уважаемые знатоки! Могу ли я к Вам обратиться за помощью в теории, а по возможности и практической реализации, вот такой задачи, решение для которой я не могу уловить. Есть некий скрипт на vbs (пусть будет script.vbs), есть домен и пользователи (права конечно же на уровне - пользователи). Ситуация 1. Для пользователя необходимо провести ряд настроек, которые выполняет Script.vbs. Запуск скрипта осуществляется путем ПКМ &quot;Запуск от имени&quot; или же через cmd при помощи RunAs. Вопрос: как скрипту узнать, что он выполняется в сессии &quot;сервисного&quot; юзера и как в скрипте отловить сессию рядового юзера? Ситуация 2. Та же схема запуска скрипта, только на уровне терминального сервера. При условии, что одномоментно на сервере может работать одновременно N-ое количество рядовых юзеров. Как скрипту понять что он работает в терминале и из под чьей сессией был осуществен его запуск ? Заранее благодарю за ответ. PS: Смотрел на юзера, который вошел в систему, со стороны objWMI.ExecQuery(&quot;Select * from Win32_ComputerSystem&quot;) .UserName, ну что то не шибко нравится вариант. Так же смотрел на сессию с позиции CreateObject(&quot;WScript.Shell&quot;) .ExpandEnvironmentStrings(&quot;%SessionName%&quot;), но что то ни то дает при запуске от имени, видимо параметры среды такой вариант не устанавливает и возвращает строку = %SessionName%</p>]]></content>
			<author>
				<name><![CDATA[TAOSoft]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26905</uri>
			</author>
			<updated>2021-12-20T04:49:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=151314#p151314</id>
		</entry>
</feed>
