2011-10-18 41 views

Odpowiedz

10

Oto trudne sposób, że zrobiłem to za pomocą polecenia net i polecenia find w pliku wsadowym:

set command=net user "%USERNAME%" /domain | FIND /I "Full Name" 

FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A 
set fullName=%fullNameText:Full Name=% 
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a 

Pierwsza linia przechowuje polecenie, które chcemy wykonać w zmiennej. Pobiera nazwę użytkownika ze zmiennych środowiskowych i przekazuje ją do komendy net user, a także do parametru /domain, aby poinformować, że ma pobrać z bieżącej domeny. Następnie wyprowadza wynik z tego, co jest wiązką danych na bieżącym użytkowniku, do metody find, która spowoduje wyciągnięcie tylko pożądanej właściwości. Rezultatem znaleziska jest format "Full Name John Doe". Druga linia wykona polecenie i umieści wynik w zmiennej fullNameText. Trzecia linia usunie część wyniku "Full Name" i kończy się na "John Doe". Czwarta linia z pętlą for usunie wszystkie spacje wiodące z wyniku, a skończy się na "John Doe" w zmiennej fullName.

+0

Możemy znaleźć nazwę domeny komputera, uruchamiając następujące commnad z linii poleceń. systeminfo | findstr/B/C: "Domena" Znaleźliśmy domenę zalogowanego użytkownika przy użyciu zmiennej środowiskowej "Userdomain". Polecenie do tego podano poniżej. echo% userdomain% – Sathish

+1

Świetnie! Działa także w PowerShell: ((użytkownik netto $ env: NAZWA_UŻYTKOWNIKA/domena | Select-String "Pełna nazwa") -replace "Pełna nazwa", ""). Trim() –

+0

Musiałem otoczyć% command% z odwróceniem przecinki w drugim wierszu, aby działały: (""% command% "') – elady

0

Zbudowałem plik wsadowy, aby szybko zrobić kilka rzeczy, wybierając akcję za pomocą zestawu p i goto. Zostawiam niepotrzebne części.

@echo off 

:begin 

echo 5. Find who is on remote PC right now 

echo. 

set /p a= 

IF %a%==5 (goto whoson) 

REM Whos on 
:whoson 
set /p remotecomputername=Enter computer name to see the current user: 
wmic /node:%remotecomputername% computersystem get username 
pause 
goto begin 

Mam nadzieję, że to pomaga.

+0

tylko powoduje nieskończoną pętlę monitów z błędem: Nieprawidłowy globalny przełącznik. –

4

Oto pochodną skeletank's odpowiedzi, która jest nieco czystsze, że pracował dla mnie ... (próbowałem skeletank's odpowiedź i to nie działa dla mnie sposób, w jaki został napisany, więc moja odpowiedź poniżej.)

SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name"" 
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A 

Następnie można użyć "DNAME" w dowolnym miejscu, aby ouput z echa lub zatwierdzić za pomocą instrukcji "IF". Możesz odwrócić żetony "%% B" i "%% A", aby powrócić do pierwszego układu nazwiska. Oszczędza to dodatkowego wysiłku zastosowanego w oryginalnej odpowiedzi z skeletank's.

Zmienne:
- tname = tymczasowa nazwa
- dname = Display Name

-Dzięki skeletank.

+0

działa jak zaklęcie – fmuecke

1

To powinna być czysta metoda, wykorzystująca polecenia dsquery i dsget bez polegania na wynikach "Full Name", które zależą od języka, podczas gdy "fn" wydaje się działać z różnymi wersjami językowymi Windows.

for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i 

Przełącznik dsget -L daje wymienione wyjścia „fn: User”, więc jedyne, co pozostaje, to chwycić drugą kolumnę na wyjściu. find "fn:" służy do pozbycia się wyniku "dsget succeeded".

+0

Wykonanie win10 w cmd: nazwa użytkownika "') DO @echo Byłem nieoczekiwany w tej chwili wygląda na to, że nie jest dostępne na maszynie dsquery –

+0

To jest sformatowane do użycia z linii poleceń. Proszę zapoznać się z moją odpowiedzią na różnicę między linią poleceń a formatowaniem skryptu .To konkretne polecenie wymaga zainstalowania RSAT na komputerze z którego go uruchomiłeś. – Lectrode

0

Jeśli chcesz go do użytku przez człowieka - co oznacza, że ​​nie muszą automatycznie przetworzy go więc masz tylko pełna nazwa - można po prostu wpisać net user <username> /domain w wierszu polecenia i przeczytać „Pełna nazwa” pole .

Dotyczy: Getting detailed domain user info from the command line.

+1

Łącze przerwane, a to polecenie nie działa, gdy jesteś zalogowany na inne konto domeny od tego, do czego twoja maszyna jest podłączona, w lesie AD –

+0

@MattKerr, naprawiłem link, dziękuję –

1

Zaakceptowanych odpowiedź (w chwili nadania) ma 4 linie kodu, kiedy tylko potrzebuję zrobić to samo:

for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o" 

to będzie działać, nawet jeśli Pełna nazwa ma więcej niż 2 części . Działa na stacjach roboczych Windows "od razu po wyjęciu z pudełka" i nie wymaga uprawnień administratora.

UWAGA: Pamiętaj, aby odpowiednio zmienić wartości %n i %o na %%n i %%o podczas korzystania z pliku wsadowego.

Wyjaśnienie komendy:

"tokens=2* określa, że ​​jedynymi tokeny będzie zwracać uwagę na to 2nd tokena (przypisany do %n), a wszystko po to (przypisanego do następnej litery: %o)

Domyślna delims to spacja, więc nie musimy jej definiować, ale jeśli będziemy musieli ręcznie ją zdefiniować, będzie to: "tokens=2* delims= ". Ponieważ spacja jest ogranicznikiem, zignoruje wszystkie pola wiodące.

Rura() została usunięta przez marchewkę (^), nakazując procesorowi poleceń, aby początkowo ją zignorowała.

Ja również wolę używać FINDSTR zamiast, ponieważ (w moich testach) stwierdziłem, że jest to szybsze polecenie, co może mieć znaczenie, jeśli często go używasz. FINDSTR /C:"Full Name" może być łatwo zastąpiony przez FIND "Full Name", jeśli wolisz.

+0

wykonanie polecenia win10 cmd w wynikach .bat w: USERNAME "Full Name" ") było nieoczekiwane w tym momencie. –

+0

nie działa, jeśli użytkownik znajduje się w innej domenie niż to, do którego jest aktualnie podłączony (ale nadal znajduje się w lesie AD w zaufaniu), Żądanie zostanie przetworzone na kontrolerze domeny dla domeny XXX.XXX.XXX. Nie można znaleźć nazwy użytkownika. Więcej pomocy można uzyskać, wpisując NET HELPMSG 2221. –

+0

Pytanie OP o polecenie "Z wiersza poleceń". Moja odpowiedź jest sformatowana jako taka. Jednakże, konkretnie mówię o tym, jak sformatować go dla skryptu .bat, jeśli zechcesz go użyć. Zobacz "UWAGA". – Lectrode

1

Lectrode answer in one string will be like this:

for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b 
+0

Należy pamiętać, że jest to sformatowane dla skryptu bat lub cmd. To nie zadziała "Z wiersza poleceń", ponieważ OP zadeklarował powyżej – Lectrode

+0

'' 'for/f" usebackq tokeny = 2, * delims = "% a in (" net user "% USERNAME%"/domain^| find/i " Pełna nazwa "') ustaw FULLNAME =% b''''/Po prostu zmień dwukrotnie %% na% i będzie działać z CMD /// – kgimpel

Powiązane problemy