Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создание папки "Имя Фамилия" для доменного пользователя (http://forum.oszone.net/showthread.php?t=323307)

Elven 30-01-2017 16:27 2707546

Создание папки "Имя Фамилия" для доменного пользователя
 
Есть сетевая папка в которой нужно создать папку пользователя от имени пользователя. Хотелось бы сделать это на js (дабы дополнить имеющийся скрипт, а не плодить новые)
На posh у меня получилось приблизительно так:
Код:

Get-ADUser $env:USERNAME | ForEach {
$folder="\\server\Именные\" + $_.Surname + " " + $_.GivenName}
if (!(Test-Path "$folder")) {New-Item -Path "$folder" -ItemType "directory"}

Помогите это перевести, если оно вообще переводимо.
Несущественная информация, которая мало влияет на суть задачи.
В названии темы случайно указал "Имя Фамилия", на самом деле "Фамилия Имя".

Elven 31-01-2017 17:56 2707786

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

Код:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /f "skip=1 delims=" %%i in ('WMIC /Namespace:\\root\directory\LDAP Path DS_user Where "DS_sAMAccountName='%username%'" Get DS_sn ^|findstr .') do (
for /f "skip=1 delims=" %%j in ('WMIC /Namespace:\\root\directory\LDAP Path DS_user Where "DS_sAMAccountName='%username%'" Get DS_givenName ^|findstr .') do (
echo %%i
echo %%j
set foldername=%%i %%j
echo !foldername!
))

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

Iska 02-02-2017 22:50 2708486

Elven, wmic.exe осуществляет вывод в Unicode (UTF-16 LE/1200). Когда for /f осуществляет попытку разбора вывода в такой кодировке, юникодные концы строк 0x000D, 0x000A превращаются в неудобоваримый OEM-ный набор из 0x0D, 0x0D, 0x0A. Это хорошо видно по результатам перенаправления вывода в файл:
Код:

>"Out.txt" (for /f "usebackq delims=" %i in (`wmic.exe UserAccount get Name`) do @echo [%i])
Видите выделенные 0x0D:
Скрытый текст

? Вот они-то и мешаются.

Самым простым способом компенсировать такое поведение является двойной разбор по for /f. Могу поискать пример, «их тут были».

P.S. А почему Вы делаете два запроса, а не один:
Код:

… get DS_sn, DS_givenName …
?

Elven 08-02-2017 15:08 2710009

Iska, если цеплять их одним запросом вне зависимости от очередности запроса вывод идет сначала имени, а потом фамилии. тут или брать значения с ключом /value и обрезать лишнее или двумя for, чтобы запихнуть в отдельные переменные. второй вариант мне как-то больше приглянулся.

С двойным разбором по for можно подробнее?

Iska 09-02-2017 13:37 2710366

Цитата:

Цитата Elven
тут или брать значения с ключом /value и обрезать лишнее »

Можно и так, и этак. А что там лишнего обрезать? Покажите пример вывода wmic.exe c get DS_sn, DS_givenName из LDAP с /value и без.

Цитата:

Цитата Elven
С двойным разбором по for можно подробнее? »

Примерно так (ну, и демонстрация произвольного порядка вывода извлечённых свойств, в качестве DS_sn и DS_givenName выступают Name и SID):
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq skip=1 delims=" %%i in (
        `wmic.exe UserAccount where "LocalAccount='True' AND Disabled='False'" get Name^, SID`
) do for /f "tokens=1,2" %%j in ("%%~i") do (
        echo [%%j] [%%k]
        echo [%%k] [%%j]
        echo.
)

endlocal
exit /b 0


Elven 09-02-2017 14:33 2710393

Самое то.
получилось как-то так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq skip=1 delims=" %%i in (
        `WMIC /Namespace:\\root\directory\LDAP Path DS_user Where "DS_sAMAccountName='%username%'" Get DS_sn^, DS_givenName`
) do for /f "tokens=1,2" %%j in ("%%~i") do (
        echo %%k %%j
        pushd \\server\Именные\
        MD "%%k %%j"
        popd
)

endlocal
exit /b 0


Iska 09-02-2017 15:12 2710410

По идее можно и зараз:
Код:

MD "\\server\Именные\%%k %%j"


Время: 13:49.

Время: 13:49.
© OSzone.net 2001-