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

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

Автор: YNY
Дата сообщения: 01.02.2011 11:13
firsteducation
[more=Вот]
Dim LaunchDir, FSO, WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
LaunchDir=WScript.ScriptFullName
LD=mid(LaunchDir,1,inStr(LaunchDir,"tester.vbs")-1)
WSHShell.Run LD&"test.bat"
[/more]работающая версия твоего VBS!!!
Проблема, по которой не работала твоя прежняя версия в том, что WSHShell.CurrentDirectory возвращает строку типа Х:\Documents and Settings\Пользователь при старте скрипта из автозапуска, а не то, что мы, типа, хотели))
Автор: rijk
Дата сообщения: 11.02.2011 12:41
Ищу скрипт для очистки локальных профилей пользователей домена. Т.е. если пользователь домена два месяца не логинелся на данном компе, что бы его профиль удалялся. При этом профили локальных пользователей игнорировались
Автор: YNY
Дата сообщения: 13.02.2011 15:27
rijk
для начала [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
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(filespec)) Then
Set f = fso.OpenTextFile(FullPath&"ListLocAcc.txt", ForAppending, True)
else
Set f = fso.OpenTextFile(FullPath&"ListLocAcc.txt", ForWriting, True)
end if
f.WriteLine FName
f.Close
Set fso = Nothing
End Function
[/more] создаешь список заблокированных аккаунтов в домене, а затем
Автор: rijk
Дата сообщения: 14.02.2011 14:37
вот что себе сделал

Код:
Dim iskl()
maxiskl=8
ReDim iskl(maxiskl)
iskl(1)="Administrator"
iskl(2)="User"
iskl(3)="All Users"
iskl(4)="Default"
iskl(5)="Default User"
iskl(6)="Public"
iskl(7)="Все пользователи"
iskl(8)="Администратор"
'iskl()=""

Function CheckF(str)
temp=true
for i=1 to maxiskl
    if str=iskl(i) then temp=false
next
CheckF=temp
End Function

Function ShowFolderList(path)
ON ERROR RESUME NEXT

Dim fso, folder, subFlds, fld, s
s = ""
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FolderExists(path) then
Set folder = fso.GetFolder(path)
Set subFlds = folder.SubFolders
For Each fld in subFlds
    if datediff("d",fld.DateLastAccessed,now)>60 and CheckF(fld.name) then
     s = s & fld.Path
    s = s & " "
        fso.DeleteFolder fld.Path, True
    end if
Next
end if
If Err.Number<>0 Then s=s & "- error"
ShowFolderList = s
End Function

dim tt
tt=ShowFolderList("C:\Users")
'MsgBox(tt)
tt=ShowFolderList("c:\Documents and Settings")
'MsgBox(tt)
Автор: YNY
Дата сообщения: 15.02.2011 09:12
rijk хм ну твой подход конечно не плох, но:
1- если кто нить попытается открыть папку просто от лени, то св-во DateLastAccessed
изменится
2- как ты узнаешь какая папка хранит локальный профиль: мона для сужебных целей завести учетку которой редко пользуешься)

С помощью [more=вот этого]
strComputer = "."
dim WshShell
set WshShell = WScript.CreateObject("WScript.Shell")

Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_UserAccount Where LocalAccount = False")
For Each objItem in colItems
    'if objItem.Name="X" then
'Wscript.Echo "Local Account: " & objItem.LocalAccount
Wscript.Echo "Name: " & objItem.Name
'Wscript.Echo "Name: " & objItem.Name&"--"&"SID: " & objItem.SID
'Wscript.Echo "SID Type: " & objItem.SIDType
Wscript.Echo "Status: " & objItem.Status

    'end if
' если акк не отключен, то...
if (objItem.Status<>"Degraded" ) then
'...
end if
Next
[/more] мона выбрать не локальные профили
Автор: rijk
Дата сообщения: 15.02.2011 10:51
YNY

Цитата:
rijk хм ну твой подход конечно не плох, но:
1- если кто нить попытается открыть папку просто от лени, то св-во DateLastAccessed
изменится
2- как ты узнаешь какая папка хранит локальный профиль: мона для сужебных целей завести учетку которой редко пользуешься)

С помощью вот этого мона выбрать не локальные профили

1. У меня специфическая работа, 50 компов, 100 пользователей, большая текучка кадров, куча перемещений и вести свой отдел кадров мне не хочется, а так хоть какое-то подспорье. Босс долго жил в Канаде и пытается привить их принципы работы у нас: "не минуты покоя" - так что от лени не лазят, а если лазят то не долго
2. Я внес необходимые мне локальные профили в исключения, у меня это User и Администратор

Автор: nakadze
Дата сообщения: 16.02.2011 16:09

Цитата:
Dim iskl()
maxiskl=8
ReDim iskl(maxiskl)
iskl(1)="Administrator"
iskl(2)="User"
iskl(3)="All Users"
iskl(4)="Default"
iskl(5)="Default User"
iskl(6)="Public"
iskl(7)="Все пользователи"
iskl(8)="Администратор"
'iskl()=""

Function CheckF(str)
temp=true
for i=1 to maxiskl
if str=iskl(i) then temp=false
next
CheckF=temp
End Function

Function ShowFolderList(path)
ON ERROR RESUME NEXT

Dim fso, folder, subFlds, fld, s
s = ""
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FolderExists(path) then
Set folder = fso.GetFolder(path)
Set subFlds = folder.SubFolders
For Each fld in subFlds
if datediff("d",fld.DateLastAccessed,now)>60 and CheckF(fld.name) then
s = s & fld.Path
s = s & " "
fso.DeleteFolder fld.Path, True
end if
Next
end if
If Err.Number<>0 Then s=s & "- error"
ShowFolderList = s
End Function

dim tt
tt=ShowFolderList("C:\Users")
'MsgBox(tt)
tt=ShowFolderList("c:\Documents and Settings")
'MsgBox(tt)

Это законченный скрипт? У меня не выполняется(
Автор: nakadze
Дата сообщения: 17.02.2011 11:31
Поменяв DateLastAccessed на DateLastModified, заработало. Да и вообще мне кажется этот параметр более уместен.
Автор: firsteducation
Дата сообщения: 24.02.2011 17:48
Люди помогите, как код оптимизировать, у меня если скрипт с этим кодом расположен не в корне диска, происходит копирование всех папок в пути, а мне нужно чтоб только папку с этим скриптом копировал, что делать?
YNY ПОМОГИ!!!

вот пример:
set DV=E:
set MI=0
WMIC.Exe Path Win32_LogicalDisk Where DriveType="2" get Caption > e1.txt
for /F "skip=1" %%i IN ('type e1.txt') Do (if /i %%i==%DV% (set MI=1))
if /i %MI% NEQ 1 goto StCopy1
goto qw
:StCopy1
xcopy "%cd%" "%DV%%~p0" /C /E /H /Y /Q
Автор: Alukardd
Дата сообщения: 24.02.2011 18:07
firsteducation
прочитать xcopy /?
и не задавать глупых вопросов!
з.ы. уберите опцию /E
Автор: Rush
Дата сообщения: 24.02.2011 18:15
firsteducation

Код: set "DV=E:"
for /F "skip=1" %%i IN ('WMIC.Exe Path Win32_LogicalDisk.DriveType^="2" get Caption') Do if /i "%%i"=="%DV%" goto StCopy1
goto qw
:StCopy1
xcopy "%cd%" "%DV%%~p0" /C /H /Y /Q
exit /b
Автор: Xconn
Дата сообщения: 25.02.2011 08:55
Добрый день!
Суть сабжа - необходимо составить отчет от составе групп "Администраторы" на всех машинах сети. В сети порядка 600 хостов - XP SP3. и7-ка. Как это сделать с помощью скрипта или софта, так что бы на хостах не осталось следов клиентской части? Попробовал Everest 5.50 и DW 7 - они не умеют.
Автор: BVV63
Дата сообщения: 25.02.2011 09:43
Xconn

Код: Echo %ComputerName% >> Файл
Net LocalGroup "Администраторы" >> Файл
Автор: Xconn
Дата сообщения: 25.02.2011 11:16
не получается.

дал такую команду PsExec.exe \\seven -c Admins0.cmd (seven - тестовая виртуалка). на обе команды батника ответ - "отказано в доступе"

Добавлено:
З.Ы. запустил батничек на этой же виртуалке из под простого юзера - отработал без замечаний. Что то тут не так
Автор: BVV63
Дата сообщения: 25.02.2011 11:26
Xconn
Попробуйте добавить в строку запуска логин-пароль (параметры -u и -p), а также поглядите, может стоит использовать ещё параметры -c и -s.
Автор: Xconn
Дата сообщения: 25.02.2011 11:55
Ларчик открывался просто - необходимо было указать свои учетные данные. Спасибо за наводку на покет утилиток. Весьма полезные инструменты
Автор: firsteducation
Дата сообщения: 25.02.2011 21:03
Люди помогите, как код оптимизировать, у меня если скрипт с этим кодом расположен не в корне диска, происходит копирование всех папок в пути, а мне нужно чтоб только папку с этим скриптом копировал, что делать?
YNY ПОМОГИ!!!

вот пример:
set DV=E:
set MI=0
WMIC.Exe Path Win32_LogicalDisk Where DriveType="2" get Caption > e1.txt
for /F "skip=1" %%i IN ('type e1.txt') Do (if /i %%i==%DV% (set MI=1))
if /i %MI% NEQ 1 goto StCopy1
goto qw
:StCopy1
xcopy "%cd%" "%DV%%~p0" /C /H /Y /Q
Автор: Rush
Дата сообщения: 26.02.2011 04:45
firsteducation

Код: set "DV=E:"
for /F "skip=1" %%i IN ('WMIC.Exe Path Win32_LogicalDisk.DriveType^="2" get Caption') Do if /i %%i==%DV% call:StCopy1 "%cd%"
goto qw
:StCopy1
xcopy %1 "%DV%\%~nx1\" /C /H /Y /Q
exit /b
Автор: firsteducation
Дата сообщения: 26.02.2011 06:17
Rush твой код у меня не работает как надо, он копирует только файлы в папке, а папку нет, вопрос остался открытым.
Автор: Rush
Дата сообщения: 26.02.2011 07:30
firsteducation

Цитата:
он копирует только файлы в папке, а папку не

Какую папку? Ту в которой находится батник или подпапки в папке с батником?

Добавлено:
если подпапки, то верни /E
Автор: firsteducation
Дата сообщения: 26.02.2011 10:48

Цитата:
Какую папку? Ту в которой находится батник или подпапки в папке с батником?

Rush Только ту в которой находится батник.

Автор: YNY
Дата сообщения: 26.02.2011 11:22
firsteducation
поправка№1: вместо "%DV%%~p0" должно быть "%DV:~0,2%%~p0" (чтобы после буквы диска с двоеточием не было не нужного пробела!).
Если хотим только содержимое папки, а не ее саму, то:
xcopy "%cd%" "%DV:~0,2%\" /C /E /H /Y /Q .
Если подпапки не нужны, то /E не пишем.
Если не хотим сохранять "полный" путь (т.е. относительный) в месте копирования, то
set ff=%~p0
xcopy "%cd%" "%DV:~0,2%%ff:~-3%" /C /E /H /Y /Q
Автор: Rush
Дата сообщения: 26.02.2011 11:37
firsteducation

Цитата:
Rush Только ту в которой находится батник.

Что "только ту" - копирует или нет? В моем коде все работает как надо - если нужно с подпапками верни /e.
Автор: firsteducation
Дата сообщения: 26.02.2011 17:08
YNY

Цитата:
Если не хотим сохранять "полный" путь (т.е. относительный) в месте копирования, то
set ff=%~p0
xcopy "%cd%" "%DV:~0,2%%ff:~-3%" /C /E /H /Y /Q

Кажется подходит, но от имени файла остаются последние две буквы, а как поменять количество букв?(да вопрос ламерский, может быть, но очень надо!).
Автор: Rush
Дата сообщения: 26.02.2011 20:39
firsteducation
Так ты мне так и не объяснил, что в моем коде у тебя не работает. Приведи, пожалуйста, полностью батник где ты вставлял мой код и он не заработал. Потому что у меня все работает.


YNY
Цитата:
set ff=%~p0
xcopy "%cd%" "%DV:~0,2%%ff:~-3%" /C /E /H /Y /Q

Скажи, пожалуйста, что должно, по твоему, делать вот это - %ff:~-3%
Автор: YNY
Дата сообщения: 27.02.2011 11:49
firsteducation> от имени файла остаются последние две буквы...
Не понимаю о чем ты говоришь, т.к. у меня все нормально и никаких букв от имени файла у меня не остается!

Например для файла C:\1\2\test.bat
имя файла - test
расширение - .bat
полное имя - C:\1\2\test.bat

Rush> %ff:~-3%
%~p0 -- возвращает путь к скрипту без имени диска,
set ff=%~p0 -- запись в переменную ff
%ff:~-3% -- возвращает значение "\имя папки\", в которой лежит скрипт путем вырезания 3-х символов начиная с конца, при условии что "имя папки" состоит из 1-го символа) если "имя папки" не == одному символу, то нуна вырезать не 3, а число символов в "имя папки" +2)

Автор: firsteducation
Дата сообщения: 27.02.2011 13:16
YNY
Цитата:
%ff:~-3% -- возвращает значение "\имя папки\"

Цитата:
если "имя папки" не == одному символу, то нуна вырезать не 3, а число символов в "имя папки" +2

Вот что я хотел узнать, СПС !


Автор: Rush
Дата сообщения: 28.02.2011 03:05
YNY
А если переложить батник в другую папку с другим количеством символов, то получится ерунда. %ff:~-3% возвращает всего лишь три последних символа переменной.
firsteducation
Я так понял, ты мои вопросы намеренно игнорируешь. Ладно, общайтесь между собой.
Автор: YNY
Дата сообщения: 28.02.2011 07:25
Rush> А если переложить батник в другую папку... ну bat это не PowerShell и не W(C)Script, и с его ограничениями очень трудно справиться: я пробовал рез-ты записать в файлы (%~p0>test1.txt, %cd%>test2.txt) дабы как-то извернуться с любым вариантом "имя папки", но что-то процесс замирает на долго так что....
Автор: Rush
Дата сообщения: 28.02.2011 08:07
YNY
У тебя тоже неправильно работают скрипты отсюда http://forum.ru-board.com/topic.cgi?forum=8&topic=19088&start=2140#10 ?
Мне понять нужно. У меня отрабатывает правильно.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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