VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Ответить
Аватара пользователя
Elven

VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Сообщение Elven »

Есть сетевая папка в которой нужно создать папку пользователя от имени пользователя. Хотелось бы сделать это на js (дабы дополнить имеющийся скрипт, а не плодить новые)

На posh у меня получилось приблизительно так:



Код:

Код: Выделить всё

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

Помогите это перевести, если оно вообще переводимо.



Несущественная информация, которая мало влияет на суть задачи.

[spoiler]В названии темы случайно указал "Имя Фамилия", на самом деле "Фамилия Имя".[/spoiler]
Аватара пользователя
Elven

Re: VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Сообщение Elven »

т.е. 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

Re: VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Сообщение Iska »

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:



Скрытый текст

[spoiler]Изображение[/spoiler]




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



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



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



Код:

Код: Выделить всё

… get DS_sn, DS_givenName …

?
Аватара пользователя
Elven

Re: VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Сообщение Elven »

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



С двойным разбором по for можно подробнее?
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Сообщение Iska »

Цитата Elven:



тут или брать значения с ключом /value и обрезать лишнее
VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя




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




Цитата Elven:



С двойным разбором по for можно подробнее?
VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя




Примерно так (ну, и демонстрация произвольного порядка вывода извлечённых свойств, в качестве 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

Re: VBS/WSH/JS - [решено] Создание папки "Имя Фамилия" для доменного пользователя

Сообщение Elven »

Самое то.

получилось как-то так:



Код:

Код: Выделить всё

@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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»