Oturum kimliğini komut satırından nasıl alabilirim?


26

Geçerli kullanıcı oturumu kimliğini windows komut satırıyla nasıl alabilirim?

Kullanıcılar sekmesinin altındaki görev listesinde, her kullanıcı bir oturum kimliğiyle ilişkilendirilir. Bunu komut satırı yoluyla almak istiyorum, böylece uzak bir uygulama için kullanabilirim.


Oturum kimliği ile ne demek istediğinizi anlamadım?
EBGreen

Kullanıcılar sekmesinin altındaki görev listesinde, her kullanıcı bir oturum kimliğiyle ilişkilendirilir. Bunu komut satırı yoluyla almak istiyorum, böylece uzak bir uygulama için kullanabilirim.
Olumsuz


%% G, bir toplu

Yanıtlar:


28

Bu kesinlikle en etkili yol değil, ancak sonuçlarına bakabilirsiniz tasklist. Çalışan her işlemin adını ve oturumunu # görüntüler. Yerel olarak giriş yaptıysanız, "konsol" adlı oturumun kimliğine bakın.

d:\>tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0      8,580 K
smss.exe                       316 Services                   0      1,500 K
...snip

Düzenle :

Query Session oturum kimliğini alır:

d:\>query session
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           janedoe                   1  Active
 rdp-tcp                                 65536  Listen

Komut satırı üzerinden almak için arıyorum.
Olumsuz

1
Doğru, komut satırından görev listesini yazın.
Gary

1
Hmm, aslında burada bir şeye bağlı olabilirsin. edit: tasklist / FI "imagename eq cmd.exe" / FO listesi Bu çıktıyı ayrıştırmayı planlıyorum. Teşekkürler!
Olumsuz

Ya da bunu yapabilirim. Nice
Olumsuz

tasklistPro / Ent OS sürümü gerektirmediğinden iyidir. Explorer.exe -tasklist /fi "imagename eq explorer.exe"
shawn

5
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do SET RDP_SESSION=%%G
echo Current RDP Session ID: %RDP_SESSION%

1
Oscar'ın çözümü aslında benim için çalıştı, %% G yerine% G: / f "tokens = 4 delims ="% G in ('görev listesi / FI "IMAGENAME eq tasklist.exe" / NH') SET RDP_SESSION =% G
Paweł Stankowski

2
@ PawełStankowski: Bir toplu iş dosyasından (%%) veya konsoldan (%) çalıştırırsanız fark budur
Thomas Weller

Bunun, birden fazla kullanıcının tasklistaynı anda çalışmasının muhtemel olmayan olaylarda ihlal edildiğine dikkat edin .
Matthew Lundberg,

5

Bu Gary'nin cevabını ve Oscar'ın cevabını birleştiriyor . Gary tarafından belirtildiği query sessiongibi , görünüşe göre çıkış

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           janedoe                   1  Active
 rdp-tcp                                 65536  Listen

veya, benim durumumda (“Kullanıcı değiştir” kullanarak)

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           gman                      1  Active
                   otherguy                  2  Disc

(RDP kurulmadı, bu yüzden test edemiyorum.) Muhtemelen sorunun amacı, şu anda aktif olan oturumun kimliğini belirlemektir. query session Geçerli oturuma benzeyen şeyin çıktısını aramanızı öneririm :

 for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b

bunların her çıktı satırından (biz, [OTURUM] kimliğini ve DEVLET ADI umuyoruz) 2., 3., ve 4. sözcüğü atar query sessioniçin %a, %bve %csırasıyla, ardından çizgi yerden OTURUM kimliği bildiriyor KULLANICI ADI benim, DEVLET benim Active.

query sessionBir usernameparametre alır çıkıyor , böylece yukarıdaki basitleştirilmiş olabilir

 for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b

veya

for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a

Bunu bir komut dosyasında (toplu iş dosyası) kullanmak için şunu söylemek isteyebilirsiniz:

set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a

kullanarak %%ave %%b(yerine %ave %b) çünkü bir betik içinde. @ Toplu iş dosyasının tamamı altındaysa muhtemelen dışarıda bırakabilirsiniz @echo off. unknownHata işleme yapmanıza olanak tanıyan başlatma (bunun çıktısında çizgi olup olmadığını tespit etme query session ). Hata işlemeyi , çıktısında birden fazla eşleşen satır olup olmadığını tanımak ve tepki vermek için genişletmek query session bir egzersiz olarak bırakılır.


Gerçek dünyama göre, birden fazla oturum varsa, her zaman aynı kullanıcı adına sahip olurlar. Ama bu muhtemelen tipik değil.
Matthew Lundberg

@MatthewLundberg: STATE nasıl? Geçerli olandan başka oturumlar "Etkin" olarak tanımlandı mı?
G-Man,

Evet, aktif olurlardı. Bu bir sunucu işletim sistemidir.
Matthew Lundberg,

2

Oturum Adından farklı olarak, Oturum Kimliği bir değişkende depolanmaz ve elde edilmesi o kadar kolay değildir. Bir tane olduğundan eminim, ancak bunu yapan yerleşik bir komut satırı aracı düşünemiyorum.

Ancak, bunu yapan küçük bir .exe dosyası (C #, .Net 4) yazdım.

Hem oturum kimliğini görüntüler, hem de onu geri dönüş kodu olarak kullanır, böylece bunu çeşitli komut dosyalarında / tekniklerinde kullanabilirsiniz.

MediaFire'daki dosyaya bağlantı


1

Bu Oscar Beh'in koduna dayanır.

tasklistBelirli bir yürütülebilir dosyanın kendisi için de dahil olmak üzere tüm örnekleri için oturum kimliğini (ve diğer bilgileri) rapor olarak gösterecektir. Komutu çalıştırırken, oturum kimliğinizi gösterir. Kodundaki tek olası hata, programın birden fazla örneği olup olmadığını, betiğin yanlış sonuç vermesine neden olabilecek durum hakkında sizi bilgilendirmemesidir.

tasklistBu komutu çalıştıran başka bir oturum olmadığından emin olmak için tüm örneklerini burada rapor ediyoruz :

for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do echo Session ID %%G

İki Oturum Kimliği bildirildiğini görürseniz, komut dosyasını tekrar çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.