Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования. Часть 2

Автор: firsteducation
Дата сообщения: 13.12.2010 18:44
А можно как нибудь без использования сторонних программ, чисто кодом?

Добавлено:
Проблема: нужно батником скопировать папку в которой он работает, никак не пойму как это сделать (место расположения папки может быть любое)
Автор: Alukardd
Дата сообщения: 13.12.2010 21:12
firsteducation
Цитата:
без использования сторонних программ

Цитата:
xcacls справка - ищем слова "наследование"
можете использовать и обычный cacls... (cacls /?)
Автор: BVV63
Дата сообщения: 14.12.2010 04:15
firsteducation

Цитата:
никак не пойму как это сделать (место расположения папки может быть любое)


Код: %~DP0
Автор: firsteducation
Дата сообщения: 14.12.2010 09:57

Цитата:
BVV63
Кажется уже теплее, ходим рядом, но всё равно "дверь" есчё не вижу, получилось скопировать исполняемый файл внутри данной папки а саму папку не получается, как же это сделать, но эта подсказка видимо в нужном направлении!
Автор: YNY
Дата сообщения: 14.12.2010 10:11
firsteducation>как мне файлом придать свойства папке
создай в папке файл Desktop.ini с нужным тебе содержанием
Автор: firsteducation
Дата сообщения: 14.12.2010 10:11
BVV63 Вот так можно, но конечно немного иначе чем я задумывал:
mkdir C:\pricol
Copy %~DP0\ C:\pricol
exit
Автор: YNY
Дата сообщения: 14.12.2010 10:36
firsteducation>А можно вот так xcopy %cd% "куда хочу" /E , причем в кавычках не может находиться сама папка источник, а так же копирует не саму папку, а только ее содержимое

А вот такой вариант сделает, наверное, именно то, что вы хотели: xcopy %cd% "куда хочу"%~p0 /E , т.е. скопирует папку со всем сод-м (см ключи xcopy для вариантов и проверки)
Автор: morrozilla
Дата сообщения: 14.12.2010 12:57
Добрый день.
для начала вступление:
Дано:
Server: Windows Server 2003 r2
Пользователи в AD

Требуется:
Создать папку обмена данными пользователей (пр. USERS)
И сделать скрипт при запуске которого происходило бы следующие:
- в папке USERS создавались бы папки с именами пользователей АД.
- Все пользователи могли бы просматривать папки всех пользователей но изменять файлы в своей папке мог бы конкретный пользователь "хозяин папки".
- Так же пользователи не могут создавать папки в корне USERS. А "хозяин папки" не мог бы удалить свою папку полностью.

Подскажите как это сделать (автоматизировать) или может у кого нибудь есть готовые решения? все делать вручную нереально ибо пользователей более 500.
Автор: firsteducation
Дата сообщения: 14.12.2010 14:29
YNY при использовании второй команды мой интерпритатор пишет: недопустимое число параметров. Странно может я где-то не так что-то сделал?
Автор: BVV63
Дата сообщения: 15.12.2010 05:32
morrozilla

Цитата:
все делать вручную нереально ибо пользователей более 500.

Всего-то работы на пару часов.

Цитата:
И сделать скрипт

Можно, конечно, и скрипт. Но вначале:

Цитата:
или может у кого нибудь есть готовые решения?

Ну, вообще-то, это в домене делается при помощи домашних папок. Чем не устраивает?

Цитата:
- Все пользователи могли бы просматривать папки всех пользователей но изменять файлы в своей папке мог бы конкретный пользователь "хозяин папки".
- Так же пользователи не могут создавать папки в корне USERS. А "хозяин папки" не мог бы удалить свою папку полностью.

Для этого имеются аттрибуты безопасности NTFS на материнской папке.
Автор: YNY
Дата сообщения: 15.12.2010 08:28
firsteducation> при использовании второй команды вот пример: xcopy "%cd%" "c:\3%~p0" /E
т.к. в имени папки могут быть пробелы, то вылазит такое сообщение, хотя справка по данной комманде грит что кавычки мона опускать: как видно теория разошлась с практикой)
Автор: firsteducation
Дата сообщения: 15.12.2010 09:22
YNY
Да команда стала срабатывать! но если папка лежит не в корне диска, она копирует весь путь, то-есть все папки в которых она лежала, спасибо, новая команда в моём арсенале. Я просто создал папку с таким же именем и скопировал туда сод. из старой папки батником!
Автор: YNY
Дата сообщения: 15.12.2010 16:48
morrozilla>создавались бы папки с именами пользователей АД
[more=Вот]
const ADS_SCOPE_SUBTREE = 2 ' или 0 если не интересны вложенные ОУ

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
'7
Set objCOmmand.ActiveConnection = objConnection

objCommand.CommandText = _
"Select * from 'LDAP://DC=Myh,DC=local' " _
& "Where objectClass='User' and objectCategory='person'"

'objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set rs = objCommand.Execute
rs.MoveFirst
'18

Do Until rs.EOF

'msgbox ChkLAcc(rs.Fields(0).Value)
'тока для не встроенных и локальных будем создавать папки
if Not ChkLAcc(rs.Fields(0).Value) then
    Set objUser1 = GetObject(rs.Fields(0).Value)

    CrF "c:",objUser1.Get("Name")
    Set objUser1= Nothing
end if
rs.MoveNext
Loop

'чекаем локальные и встроенные аккаунты
Function ChkLAcc(FDQNAccName)
const LAC0="IUSR_"
const LAC1="IWAM_"
const LAC2="SUPPORT_"
const LAC3="krbtgt"
on error resume next
ChkLAcc=False
Set objUser = GetObject(FDQNAccName)

if IsNull(objUser.Get("Description")) then exit function
    if instr(objUser.Get("Description"),"Встроенная")_
OR instr(objUser.Get("Name"),LAC0)_
OR instr(objUser.Get("Name"),LAC1)_
OR instr(objUser.Get("Name"),LAC2)_
OR instr(objUser.Get("Name"),LAC3) then
         ChkLAcc=true
        Set objUser = Nothing
        exit function
end if
End Function
'создаем папку если еще не существует в указанном месте с нужным именем
Function CrF(FullPath,FName)
'msgbox FullPath&"-}-"&FName
Set fso = CreateObject("Scripting.FileSystemObject")
if NOT (fso.FolderExists(FullPath&"\"&FName))then
     fso.CreateFolder(FullPath&"\"&FName)
end if
Set fso = Nothing
End Function
[/more] тебе рыба скрипта по созданию папок, с пермишенами лучше руками действуй

Вот этим можешь попробовать пермишены поправить
Автор: evgen tanuki
Дата сообщения: 16.12.2010 12:27
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

надо дописать так чтоб в поле description писался еще и IP адрес машины на которой залогинелся пользователь....


к сожалению опыта мала, и даже если что то нагуглил, применить не смог =(
Автор: YNY
Дата сообщения: 16.12.2010 13:30
evgen tanuki> так чтоб в поле description писался еще и IP адрес ...
[more=Вот]
'On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
'msgbox mid(ThisComp.Name,instr(ThisComp.Name,"=")+1)

'если IP не определили, то ничего не делаем

if getHip(mid(ThisComp.Name,instr(ThisComp.Name,"=")+1))<>"" then
'msgbox getHip(mid(ThisComp.Name,instr(ThisComp.Name,"=")+1))
Thiscomp.put "description", "Logged on: " &_
oUser.cn & " " & CStr(Now) & " c IP = " &_
getHip(mid(ThisComp.Name,instr(ThisComp.Name,"=")+1))
ThisComp.Setinfo
end if

Function getHip(CompName)
getHip=""
Set objWMIService = GetObject( _
"winmgmts:\\" & CompName & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
("Select IPAddress from Win32_NetworkAdapterConfiguration ")

For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) _
to UBound(IPConfig.IPAddress)
'WScript.Echo IPConfig.IPAddress(i)
        getHip=(IPConfig.IPAddress(i))
        'предпологается что у хоста одна сетевуха активна!!!
        exit function
Next
End If
Next

End Function
[/more] пробуй.
Автор: firsteducation
Дата сообщения: 16.12.2010 13:40
Добрый вечер!!! мне нужно через батник эксплорером на диске D: открыть этот диск, а как это сделать не знаю, он всегда открывает диск C:! Хочется чтоб, если батник в другой диск кидаешь, он новый диск открыл, подскажите пожалуйста как так сделать? (эт если командой захочу открыть).
Автор: YNY
Дата сообщения: 16.12.2010 13:42
firsteducation> Хочется чтоб, если...
приведи текст твоего батника
Автор: firsteducation
Дата сообщения: 16.12.2010 13:43
start C:\WINDOWS\explorer.exe /%~DP0
pause
exit
Автор: YNY
Дата сообщения: 16.12.2010 13:57
firsteducation>если батник в другой диск кидаешь, он этот диск и открыл в проводнике Windows
[more=Вот]
start %SystemRoot%\explorer.exe %~DP0
pause
exit
[/more] в ХР работает точно)
Автор: YURETS777
Дата сообщения: 16.12.2010 14:23
Можно ли в vbs сделать так, чтобы по IP-адресу резолвилось не Нетбиос Имя, а DNS ?
nbtstat сканирует только нетбиос.
Автор: evgen tanuki
Дата сообщения: 16.12.2010 14:30


Проверил - все работает, посмотрю что будет если две карточки позже =!
Спасибо!

Добавлено:
Ну что, поехали дальше.
Юзеры недельку перегрузили компа, и благодаря скрипту:


'On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
'msgbox mid(ThisComp.Name,instr(ThisComp.Name,"=")+1)

'если IP не определили, то ничего не делаем

if getHip(mid(ThisComp.Name,instr(ThisComp.Name,"=")+1))<>"" then
'msgbox getHip(mid(ThisComp.Name,instr(ThisComp.Name,"=")+1))
Thiscomp.put "description", "Logged on: " &_
oUser.cn & " " & CStr(Now) & " c IP = " &_
getHip(mid(ThisComp.Name,instr(ThisComp.Name,"=")+1))
ThisComp.Setinfo
end if

Function getHip(CompName)
getHip=""
Set objWMIService = GetObject( _
"winmgmts:\\" & CompName & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
("Select IPAddress from Win32_NetworkAdapterConfiguration ")

For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) _
to UBound(IPConfig.IPAddress)
'WScript.Echo IPConfig.IPAddress(i)
getHip=(IPConfig.IPAddress(i))
'предпологается что у хоста одна сетевуха активна!!!
exit function
Next
End If
Next

End Function


получили описание в поле "description", так же в поле "mail" набил им руками их почту.
Вопрос для чего все это нужно было. Да собственно для того, чтоб потом каким то макаром стащить это все ил AD и положить в экселевский файлик, где будут колонки "Выводимое имя" "IP(взятое из поля "description") и mail. Вот только не знаю как это все смастерить, да так чтоб еще и актуальность постоянно поддерживалась.
если кто подскажет буду благодарен, или подскажите в какую сторону копать...

Автор: firsteducation
Дата сообщения: 16.12.2010 19:45
Спасибо YNY! работает как надо!
Автор: YNY
Дата сообщения: 17.12.2010 08:51
evgen tanuki>стащить это все в экселевский файлик да так чтоб еще и актуальность постоянно поддерживалась
А зачем такой огород городить??? Винда и так ведет аудит событий каких хочешь и все достаточно актуально, тебе стоило искать: настройка аудита, а если не достаточно, то подписку на события + чтение eventlog-а!!!
Автор: evgen tanuki
Дата сообщения: 17.12.2010 11:35
дело в том что потом это все добро планируется заливать автоматом на сайт, где будет понятно к кого какой ip (Фамилия и тж) у на с почти 400 компов =)
Автор: Valdon
Дата сообщения: 23.12.2010 18:14
Кто знает как определить (вкл. или выкл.) текущее состояние NumLock из WSH?
Автор: YNY
Дата сообщения: 27.12.2010 13:53
Valdon> как определить (вкл. или выкл.)...
Если и есть способ, то черезчур геморройный!
Если же тебе нуна проверять не состояние клавиши, а наличие цифр, то мона воспользоваться функцией IsNumeric(S) где в S лежит то, что хотим проверить!

Автор: Valdon
Дата сообщения: 28.12.2010 08:35
YNY

Цитата:
Если же тебе нуна проверять не состояние клавиши, а наличие цифр, то мона воспользоваться функцией IsNumeric(S) где в S лежит то, что хотим проверить!
- если не затуднит, можно на примере ?
А вообще задача такая: На ноутбуке без доп. клавиатуры (Win XP) зделать так чтоб после логона NumLock всегда был выключен, метод WshShell.SendKeys "{NUMLOCK}" переключает тупо NUMLOCK из одного состояния в другое (неизвестное)
Может при логоне реестр анализировать на предмет включения нумлока (HKCU,"Control Panel\Keyboard","InitialKeyboardIndicators",0x00000000,"2") ?
ЗЫ: Просто тетки-бухгалтерши достали со звонками по поводу "А почему при наборе букв циферьки вылазют ?"
Автор: YNY
Дата сообщения: 28.12.2010 10:40
Valdon> если не затуднит, можно на примере
После твоего уточнения пример проверки ввода цифер не катит.
Надо же я и не знал что такое может быть в реестре)
Вешай скрипт , [more=например такой]
строку ниже скопируй в файл с расширением bat
reg add "HKCU\Control Panel\Keyboard" /v InitialKeyboardIndicators /t reg_sz /d 0 /f
[/more]
на логоф/выкл компа, в котором состояние будет меняться на 0 -- выкл NumLock


Автор: contrafack
Дата сообщения: 04.01.2011 20:38
Коллеги, такая задача:

С компа по telnet подключаюсь к 192.168.5.5:4000.
пишет ready. Далее посылаю команду get. Он возвращает код HTML. И связь прерывается.
Хочу этот код направить в браузер. Чтоб по ярлыку можно было вызывать. И он преобразовывал код в удобный всем вид.

как можно это дело автоматизировать?
Автор: YNY
Дата сообщения: 05.01.2011 15:47
contrafack> как можно это
а стоит ли??? сохрани страницы с кодом ошибки, [more=мона посмотреть тут]
Коды ответов WEB-сервера
[/more], и смотри)

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

Предыдущая тема: BackUp Win2003Serer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.