PDA

Показать полную графическую версию : [решено] Создание папки "Имя Фамилия" для доменного пользователя


Elven
30-01-2017, 16:27
Есть сетевая папка в которой нужно создать папку пользователя от имени пользователя. Хотелось бы сделать это на 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
т.е. 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
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:
http://i.imgur.com/D0BqYsC.png
? Вот они-то и мешаются.

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

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

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

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

Iska
09-02-2017, 13:37
тут или брать значения с ключом /value и обрезать лишнее »
Можно и так, и этак. А что там лишнего обрезать? Покажите пример вывода wmic.exe c get DS_sn, DS_givenName из LDAP с /value и без.

С двойным разбором по 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
Самое то.
получилось как-то так:
@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
По идее можно и зараз:
MD "\\server\Именные\%%k %%j"




© OSzone.net 2001-2012