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

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

Автор: AXVill
Дата сообщения: 19.03.2009 17:22
gbcfkf
Можешь проверять компы в цикле на предмет "жив не жив" тем же пингом.
Автор: foeticide
Дата сообщения: 25.03.2009 18:03
Такая задача:
Скриптом разлогинить локального юзера и заблокировать или отключить его учетную запись.
Автор: YNY
Дата сообщения: 26.03.2009 11:50

Цитата:
foeticide

[more=просмотрр аккаунтов]
'Win32_UserAccount
'Win32_Group
'Win32_Account
'SystemAccount
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_UserAccount Where LocalAccount = True")
For Each objItem in colItems
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
Wscript.Echo
Next
[/more]
Автор: el_verdugo
Дата сообщения: 27.03.2009 02:43
gbcfkf
Делаешь список компов, скриптом пингуешь по списку - создаешь новый список, после чего обрабатываешь полученный список. имхо самый быстрый вариант...

foeticide
Чтобы разлогинить юзера можно использовать wmi: класс Win32_OperatingSystem, метод Win32Shutdown, параметр Flags = 0;
пример:

Код: wmic /node:@"c:\complist.txt" /FAILFAST:ON Path "Win32_OperatingSystem.Locale='0409' OR Locale='0419'" CALL Win32Shutdown 0 /NoInteractive
Автор: YNY
Дата сообщения: 27.03.2009 06:03

Цитата:
foeticide

Цитата:
отключить его учетную запись.

strComputer = "."
Set objUser = GetObject("WinNT://" & strComputer & "/Guest")

objUser.AccountDisabled = True
objUser.SetInfo


Добавлено:
Supported Platforms

Windows Server 2003 Yes

Windows XP Yes

Windows 2000 Yes

Windows NT 4.0 Yes

Windows 98 No

Автор: DiZka
Дата сообщения: 03.04.2009 12:47
Помогите доработать скриптик напильником.
Скрипт удаляет файлы старше N Дней....


Код:
' ----------
' Начало основной секции. Отсюда начнется выполнение при запуске скрипта.
Set FSO = CreateObject("Scripting.FileSystemObject")
' директория, где будут храниться бэкапы.
sDir = "E:\Backup\Srvexchmain_Acronics"
Set objDir = GetFolder(sDir)
DeleteOlderFiles(objDir)

' ---------- Секция функций

' Получить файл
Function GetFile(sFile)
On Error Resume Next

Set FSO = CreateObject("Scripting.FileSystemObject")
Set GetFile = FSO.GetFile(sFile)
if err.number <> 0 then
WScript.Echo "Error Opening file " & sFile & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Function

' Получить папку
Function GetFolder (sFolder)
On Error Resume Next

Set GetFolder = FSO.GetFolder(sFolder)
if err.number <> 0 then
WScript.Echo "Error Opening folder " & sFolder & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Function

' удалить один файл (имя файла передается в sFile)
Sub DeleteFile(sFile)
On Error Resume Next

FSO.DeleteFile sFile, True
if err.number <> 0 then
WScript.Echo "Error Deleteing file " & sFile & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Sub

' Удалить файлы старше N дней
Sub DeleteOlderFiles(objDir)
' просматриваем все файлы в директории
for each efile in objDir.Files
' используем DateLastModified, а не DateCreated, поскольку
' DateCreated не всегда возвращает правильную дату
FileDate = efile.DateLastModified
Age = DateDiff("d",Now,FileDate)
' в данном случае возраст файла не больше N дней
If Abs(Age)>2 Then
DeleteFile(efile)
End If
next
End Sub
Автор: YNY
Дата сообщения: 06.04.2009 12:42

Цитата:
DiZka

нет никакова смысла по 100 раз генерить Set FSO = CreateObject("Scripting.FileSystemObject")
Если ты знаешь имена файлов, то попроуй так:

'до запуска процедуры/функции удаления

dim ArrFN=array("FN1","FN2","FN2")
numF=0
for i=0 to 2
numF=numF+GetFile(ArrFN(i))
next
if numF=3 then
'понеслось твое удаление
end if

Добавлено:
Лучше свои функции не называть так же как называются внутренние ф-ции VBScript, иначе мог быть касяки

Добавлено:
обычно в конце функции ее имени присваивается (нужный) результат ее работы, иначе конструкции типа numF=numF+GetFile(ArrFN(i)) работать не будут!!!

Добавлено:
используя свою конструкцию for each efile in objDir.Files (перед началом удалений) и счетчик находишь число файлов и если все ок, то удаляешь
Автор: DiZka
Дата сообщения: 09.04.2009 12:51
YNY
Скрипт не мой да и в скриптописании я не силен )
Имена файлов я знаю... но там в имени файла генерится дата.... File_name(date).tib

Можешь подправить скрипт сам?
Автор: YNY
Дата сообщения: 10.04.2009 07:04

Цитата:
DiZka

по скоку как я понял тебя интересует количество файлов в папке то тогда вот так:

Function MapWorkFolder(NFtoMp)
    KolFilesInMpF=0
for each efile in NFtoMp.Files
    KolFilesInMpF=KolFilesInMpF+1
next    
'msgbox "В рабочей папке содержится" & KolFilesInMpF & "файлов"
MapWorkFolder=KolFilesInMpF
end Function

' Удалить файлы старше N дней
SUB DeleteOlderFiles(objDir)
' просматриваем все файлы в директории
if MapWorkFolder(objDir)<> 3 then
' если файлов, например не 3, то выходим из процедуры DeleteOlderFiles
exit sub
else
'- *** тут твое удаление
for each efile in objDir.Files
' используем DateLastModified, а не DateCreated, поскольку
' DateCreated не всегда возвращает правильную дату
FileDate = efile.DateLastModified
Age = DateDiff("d",Now,FileDate)
' в данном случае возраст файла не больше N дней
If Abs(Age)>2 Then
DeleteFile(efile)
End If
next
'- ***
end if
End SUB
Автор: Laki7a
Дата сообщения: 10.04.2009 07:20
Народ есть такая задача:

Все файлы, время ДОСТУПА (последнее обращение, открыие) к которым, старше хх.хх.хххх, переместить в папку yyyy, сохраняя все пути?

ПРИМЕР:
Входные данные:
Файл Время доступа
d:\folder1\file1 09.04.2009
d:\folder1\file2 01.01.2009
d:\folder1\folder2\file3 09.04.2009
d:\folder1\folder2\file4 01.01.2009


Выходные данные( условие время доступа больше 3 месяцев):
Файл Время доступа
d:\yyy\folder1\file2 01.01.2009
d:\yyy\folder1\folder2\file4 01.01.2009

d:\folder1\file1 09.04.2009
d:\folder1\folder2\file3 09.04.2009


Если есть возможность перед перемещением ОЦЕНИТЬ РАЗМЕР перемещаемых данных (если это будет переноситься на другой или сетевой диск)?
Автор: DiZka
Дата сообщения: 10.04.2009 08:32
YNY
Чет я не поянл а как его объединить с тем скриптом? Т.е. где указать рабочую папку в твоем скрипте то?...
Автор: YNY
Дата сообщения: 15.04.2009 10:37

Цитата:
DiZka

в своем примере удаляешь все ниже слов ' Удалить файлы старше N дней
и копируешь на это место все, что я написал начиная с Function MapWorkFolder(NFtoMp)
Автор: DiZka
Дата сообщения: 15.04.2009 11:29
YNY


Код:
' ----------
' Начало основной секции. Отсюда начнется выполнение при запуске скрипта.
Set FSO = CreateObject("Scripting.FileSystemObject")
' директория, где будут храниться бэкапы.
sDir = "C:\test"
Set objDir = GetFolder(sDir)
DeleteOlderFiles(objDir)

' ---------- Секция функций

' Получить файл
Function GetFile(sFile)
On Error Resume Next

Set FSO = CreateObject("Scripting.FileSystemObject")
Set GetFile = FSO.GetFile(sFile)
if err.number <> 0 then
WScript.Echo "Error Opening file " & sFile & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Function

' Получить папку
Function GetFolder (sFolder)
On Error Resume Next

Set GetFolder = FSO.GetFolder(sFolder)
if err.number <> 0 then
WScript.Echo "Error Opening folder " & sFolder & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Function

' удалить один файл (имя файла передается в sFile)
Sub DeleteFile(sFile)
On Error Resume Next

FSO.DeleteFile sFile, True
if err.number <> 0 then
WScript.Echo "Error Deleteing file " & sFile & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Sub

' Удалить файлы старше N дней
Function MapWorkFolder(NFtoMp)
KolFilesInMpF=0
for each efile in NFtoMp.Files
KolFilesInMpF=KolFilesInMpF+1
next
'msgbox "В рабочей папке содержится" & KolFilesInMpF & "файлов"
MapWorkFolder=KolFilesInMpF
end Function

' Удалить файлы старше N дней
SUB DeleteOlderFiles(objDir)
' просматриваем все файлы в директории
if MapWorkFolder(objDir)<> 3 then
' если файлов, например не 3, то выходим из процедуры DeleteOlderFiles
exit sub
else
'- *** тут твое удаление
for each efile in objDir.Files
' используем DateLastModified, а не DateCreated, поскольку
' DateCreated не всегда возвращает правильную дату
FileDate = efile.DateLastModified
Age = DateDiff("d",Now,FileDate)
' в данном случае возраст файла не больше N дней
If Abs(Age)>2 Then
DeleteFile(efile)
End If
next
'- ***
end if
End SUB
Автор: rosalin
Дата сообщения: 15.04.2009 17:11
Ребята может кто сталкивался есть папка с файлами вида

файлов несколько сотен тысяч

pd50000000001.msg
pd50000000002.msg
pd50000000003.msg
pd50000000004.msg
pd50000000005.msg
pd50000000006.msg
pd50000000007.msg

это почтовые сообщения подскажите скриптик который при запуске заархивирует файлы с разбивкой по месяцам , типа mm.yyyy
Автор: YNY
Дата сообщения: 17.04.2009 08:43

Цитата:
DiZka

чтоб увидеть сообщения убери кавычку перед msgbox, если файлов не 3 то удаление не происходит, блин еще один "умный" вопрос и с тебя прийдется брать бабло за консультацию )))
Автор: YURETS777
Дата сообщения: 18.04.2009 19:38
как на vbs отобразить текущие активные соединения, подмапированные диски (к кому подсоединена РС, служба Сервер потушена), в том числе к IPC$ и admin$ ?

Автор: YURETS777
Дата сообщения: 21.04.2009 09:57
Еще такой вопрос, есть ли в VBS команды удаления целой ветки реестра со всеми подветками и ключами.
Аналог такого:
REGEDIT4

[-HKEY_CURRENT_USER\Software\Microsoft\Office]

Простой oReg.DeleteKey HKEY_CURRENT_USER, "Software\Microsoft\Office"
Почему-то ключ не удаляет.
Автор: YNY
Дата сообщения: 21.04.2009 10:05

Цитата:
YURETS777
есть ли в VBS команды удаления целой ветки реестра со всеми подветками -- нет нету, тама мона удалить тока поочередности: сначала ключи, потом подраздел и уже в самом конце раздел ну или пустой раздел, сам не понимаю зачем такое ограничение наложено, но оно есть !

Автор: YURETS777
Дата сообщения: 21.04.2009 10:09
Это типа в цикле делать просмотр всех ключей и удалять каждый.
Вот такой скриптик получился, но не срабатывает


Код:
'on error resume next
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CURRENT_USER = &H80000001
Dim strArray
Dim strSubKey
Dim intIdx
RegkeyForDel = "Software\Microsoft\Office"
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKey = RegkeyForDel

intIdx = oReg.EnumKey(HKEY_CURRENT_USER, strKey, strArray)

If intIdx = 0 And IsArray(strArray) Then
For Each strSubKey in strArray
oReg.DeleteKey(HKEY_CURRENT_USER, strKey & "\" & strSubKey)
Next
End If

oReg.DeleteKey(HKEY_CURRENT_USER, strKey)
Автор: YNY
Дата сообщения: 21.04.2009 11:45

Цитата:
YURETS777
но не срабатывает если тебе нужен универсальный метод то тама нада для каждого типа ключа свой метод задействовать, а если че конкретное то определиь с типом

Автор: YURETS777
Дата сообщения: 21.04.2009 11:52
Короче нужно полностью удалить офисную (2003) ветку профиля со всеми подключами.
Автор: YNY
Дата сообщения: 21.04.2009 11:52
взято отсюда примерно technet.microsoft.com/magazine
On Error Resume Next

Const HKEY_CURRENT_USER = &H80000001

strComputer = "."
strKeyPath = "Software\Test"

Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")

DeleteSubkeys HKEY_CURRENT_USER, strKeypath

Sub DeleteSubkeys(HKEY_CURRENT_USER, strKeyPath)
objRegistry.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubkeys

If IsArray(arrSubkeys) Then
For Each strSubkey In arrSubkeys
DeleteSubkeys HKEY_CURRENT_USER, strKeyPath & "\" & strSubkey
Next
End If

objRegistry.DeleteKey HKEY_CURRENT_USER, strKeyPath
End Sub

Автор: YURETS777
Дата сообщения: 21.04.2009 11:55
Получилось, Big Thanx
Автор: yazzi
Дата сообщения: 22.04.2009 14:03
Подскажите пожалуйста, возможно ли где нибудь в ГПО поставить обработку политики компьютера после входа в систему пользователя.
Автор: Attid
Дата сообщения: 24.04.2009 09:10
а никто не подскажет как можно раздать права на ветки реестра ?

есть программа лезет туда куда не надо =( надо раздать на ветку доступ для пользователей.

Автор: north_crow
Дата сообщения: 24.04.2009 13:12
Attid
через GPO
Computer Configuration -Windows Settings-Security Settings-Registry
там выбираешь ветку и задаешь права
Автор: Attid
Дата сообщения: 24.04.2009 13:35
north_crow спасибо, а скриптом можно это дело ?
Автор: YNY
Дата сообщения: 29.04.2009 12:31

Цитата:
Attid

некоторые вещи лучше не доводить до автоматизьма
Автор: vSoul
Дата сообщения: 01.05.2009 17:11
Ребята, помогите, пожалуйста, довести скрипт до рабочего состояния. Задача:
1. Выполнить поиск значения параметра (Data) в реестре, по маске, в заданном параметре (Value) и в заданном разделе (Key).
2. Считать имя раздела реестра, в котором было найдено нужное значение параметра.
3. В данном разделе считать значение другого параметра (Data) в заданном параметре (Value).
4. Вывести найденное значение на экран.


Код:
Const HKEY_LOCAL_MACHINE = &H80000002
Public WShell

strComputer = "."
Set WShell = Wscript.CreateObject("Wscript.Shell")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
strValueName = "DisplayName"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath & "\" & subkey , strValueName, strValue
If strValue Like "%Office%" Then
strValueName1 = "UninstallString"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath & "\" & subkey , strValueName1, strValue1
WScript.Echo (strValue1)
End If
Next
Автор: VladKor
Дата сообщения: 04.05.2009 14:14
Люди помогите плиз, написал скрипт проверки даты регистрации компов в доменеЮ на моей машине работает на другой нет, в написании скриптов не специалист, вот код:

[more]
Dim fso, dcmp, acmp
Set fso = CreateObject("Scripting.FileSystemObject")
Set dcmp = fso.OpenTextFile ("dead_cmp_list.txt", 2, True)
Set acmp = fso.OpenTextFile ("act_cmp_list.txt", 2, True)
Set objShell = CreateObject("WScript.Shell")


Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

arrComputers = Array(".")
For Each strComputer In arrComputers

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\directory\LDAP")
Set colItems = objWMIService.ExecQuery("SELECT * FROM ds_computer", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In colItems
if (objItem.DS_lastLogon(Value) = 0) Then
dcmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "нет данных о регистрации "
else
acmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "регистрировался: " & WMIDateStringToDate(objItem.DS_lastLogon)
end if
Next
Next


Function WMIDateStringToDate(dtmDate)
N = objItem.DS_lastLogon(Value)
WMIDateStringToDate = CDate(DateSerial(1601, 1, 1) + N/1e7/86400)
End Function

WScript.Echo "Сбор данных закончен"

[/more]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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