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

» Автоматизация администрирования

Автор: finderknowledge
Дата сообщения: 13.02.2006 14:38
niichavo

Цитата:
Это для запуска скрипта из-под групповой политики надо создать файл типа cmd: runas .."имя админа и пароль".. script.pl?

просто заходишь на свой компьютер под доменным админом и запускаешь

Цитата:
\\server\там_где_находится_perl\perl.exe script.pl? Или так не сработает

сработает, только \\server\share\perl\bin\perl "место хранения скрипта"\script.pl

Автор: niichavo
Дата сообщения: 13.02.2006 15:12
1. Если я повторяюсь, то звиняйтэ. Но мне кажется, что нет. Не получается запустить скрипт на удалённой машине юзера (WinXP SP2; в реестре на компе юзера в HKLM, HLCU создал строковые параметры REG_SZ Remote=1; запустил wscript -regserver...). Пишет, что "Компьютер удаленного сервера не существует или недоступен; строка 3,1; код 800A01CE"

Код:
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.vbs", "computer")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
WScript.Sleep 100
Loop
Автор: niichavo
Дата сообщения: 14.02.2006 09:49
niichavo
Вот сам себе решил ответить на вопрос (2) . Я пока нашёл лишь одно средство для обхода ограничения запуска интерактивных процессов на удаленной машине - это использование класса Win32_ScheduledJob и его методов Create и Delete. Но использовать енто как-то ... ну не очень удобно.
Автор: FreemanRU
Дата сообщения: 14.02.2006 11:04
niichavo
По поводу вопроса 2 - а кто тебе сказал вообще что он должен появится? Он запускает от имени того, кто запускает скрипт, и появляется в процессах на удаленной машине. но с рабочим столом текущего пользователя естесвтвенно не взаимодействует.

По поводу первого я уже кому-то писал. WMI запускает только ИСПОЛЬНИМЫЕ файлы (CMD, BAT, EXE,COM). Тво скрипт надо переделать:

Код:
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("cscript //nologo disk:\path\test.vbs", "computer")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
WScript.Sleep 100
Loop
Автор: niichavo
Дата сообщения: 14.02.2006 12:03
FreemanRU
По поводу (1). Попробовал. Всё та же ошибка: Компьютер удаленного сервера не существует или недоступен; строка 3,1; код 800A01CE.
Автор: underline
Дата сообщения: 16.02.2006 00:09
Народ, не подскажите как можно выключить сетевой интерфейс (приостановить использование подключения) с помощью сценария???

Из того что нашел:
- WMI - не поддерживает (Win32_NetworkAdapter);
- CMD - средств не нашел;
- netsh - LAN не поддерживется (netsh interface set interface name="LAN_1" admin=DISABLED)

Может кто подскажет дрегие способы решения...

Заренее спасибо...
Если где проскакивало, а я не узрел - не пинайте... лучше дайте ссылку...
Автор: Refugee
Дата сообщения: 16.02.2006 01:07
underline
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=420#20
Автор: underline
Дата сообщения: 16.02.2006 08:38
Огромное спасибо!!!
А то уже 2 недели книги с инетом штудирую....
Автор: vavaka2
Дата сообщения: 19.02.2006 14:37
Подскажите пожалуйста, как изменить цвет папки в зависимости от количества файлов в ней? (Имеется почтовая программа, которая распихивает письма по персональным папкам и надо знать, кто долго их не забирает).
Автор: mozers
Дата сообщения: 20.02.2006 12:53
vavaka2
Цвет папки в чем??? Если пользуешься Тотал Коммандером, то задача элементарно решается с помощью плагина DirSizeCalc. В любом случае вопрос, имхо, не для этого топика.
Автор: vavaka2
Дата сообщения: 20.02.2006 17:12
mozers
Спасибо, по описанию DirSizeCalc - это то что надо! Скачал, установил, а настроить не могу - в плагины добавился, а работать не хочет Подскажи, чо нажать?

Цитата:
В любом случае вопрос, имхо, не для этого топика.

подумал,что мониторить сотню папок не открывая - это и есть автоматизация администрирования
Автор: fox84
Дата сообщения: 21.02.2006 06:10
Хелп. Есть такая задача: 100 пользователей и для них надо изменить права на изменение своего profilePath. Ручками с помощью ADSIEdit все Ок, но это подходит для 1-2х пользователей. Как можно реализовать сие с помощью скрипта.

Заранее спасибо.
Автор: Nello
Дата сообщения: 21.02.2006 09:20

Код: Option Explicit
On Error Resume Next
Dim objConn, objComm, objRS, objUser
Dim strBase, strFilter, strAttrs, strScope
'**********************************************************************
'Set the ADO search criteria
'**********************************************************************
strBase = "<LDAP://dc=microsoft,dc=local>;" ' Здесь надо указать свои значения
strFilter = "(&(objectclass=user)(objectcategory=Person));"
strAttrs = "ADsPath;"
strScope = "Subtree"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open
'**********************************************************************
'Need to enable Paging in case there are more than 1000 objects returned
'**********************************************************************
Set objComm = CreateObject("ADODB.Command")
Set objComm.ActiveConnection = objConn
objComm.CommandText = strBase & strFilter & strAttrs & strScope
objComm.Properties("Page Size") = 1000
Set objRS = objComm.Execute( )
While not objRS.EOF
Set objUser = GetObject( objRS.Fields.Item("ADsPath").Value )
objUser.profilePath = "\\server\profile" ' Укажите свои значения
objUser.SetInfo
if Err.Number <> 0 Then
Wscript.Echo objUser.Name & " error occurred"
Err.Clear
Else
Wscript.Echo objUser.Name & " modified"
End if
objRS.MoveNext
Wend
Автор: IliaKot
Дата сообщения: 22.02.2006 14:54
Значит так, тема была примерно такая, на OU цепляется политика которая при логоне пользователя запускает скрипт *.wsf которые в свою очередь использует функции из *.vbs скрипта, делалось для того что бы администраторы в филлиалах, коих много, заполняли свой маленький блок, и не вдавались в подробности дальнейшего процесса подключения.

Функции которые доступны "администраторам" на местах это

mpd "_наименование группы в AD_","_Путь к шаре(ресурсу)_","_Буква диска_"
mpd_user "_логин пользователя в AD_","_Путь к шаре(ресурсу)_","_Буква диска_"

Первая проблема возникла в связи с тем что многие группы по которым подключались диски были вложенными и пользователь не являлся их прямым членом, решилось через рекурсий, а что бы сократить время заполнялся словарь...

Вторая проблема, пока не решена полностью, это Primary Group, найти её можно, и потом через рекурсию так же отработать, но беда в том что выяснение её очень долго, порядка 30-40 секунд, база AD разрослась неимоверно. Пока сделано просто, т.к. по умолканию Primary Group у всех Domain Users, то введена проверка на группу, если вместо группы ввести everyone то диск мапится по умолчанию.

Общая просьба и пожелание, скрипт выкладываю конечно же для всех, всё работает, отладки теоретичести не требует. Просьба,о любых изменениях которые улучшают работу этого монстра прошу извещать, очень заинтересован, в особенности если кто найдёт способ быстро отрабатывать Primary Group на большой базе AD, более 5000 объектов.... Точно не помню...

Далее предлагаю текст скрипта и блока вызова:

[more=Непосредственно скрипт]

'************************************************************
' Объявление переменных
'************************************************************

Dim WshShell, WshNetwork,Level,dic
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj
Dim line
set dic = createobject("Scripting.Dictionary")
'************************************************************
' Внутренние функции
'************************************************************
On Error Resume Next

Function MapDrv(DrvLet, UNCPath)
Dim WshNetwork
Dim Msg
On Error Resume Next
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
Select Case Err.Number
Case 0
Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
End Select
End Function
'*****************************************************************
' Словарь
'*****************************************************************

function dictionary
set dic = createobject("Scripting.Dictionary")
Level=0
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject ("LDAP://" & objSysInfo.UserName)
arrMembersOf = objUser.GetEx("memberof")
if Err.Number = 0 then GroupBelong(arrMembersOf)
end function
'*****************************************************************
' Рекурсия
'*****************************************************************
function GroupBelong(arrMembers)
On Error Resume Next
For each Group in arrMembers
Set objGroup = GetObject ("LDAP://" & Group)
objGroup.GetInfo
dic.add lcase(objGroup.Get("cn")),lcase(objGroup.Get("cn"))
arrMembersSub = objGroup.Getex("memberof")
if Err.Number = 0 then GroupBelong(arrMembersSub)
Err.Number = 0
Next
Level=Level+1
if Level=50 then
WScript.echo "Достигнут максимальный уровень вложенности"
exit function
end if
End function
'***************************************************************
' Получение Primary Group пользователя
'***************************************************************

'WScript.Echo "Current User Name: " & CurrentUserName()
'WScript.Echo "Current User ADsPath: " & ADsPathUser(CurrentUserName())
'WScript.Echo "Primary Group:"
'WScript.Echo GetPrimaryGroup(ADsPathUser(CurrentUserName()))

' Возвращает "SAMAccountName" текущего пользователя
Function CurrentUserName()
Set WshNetwork = WScript.CreateObject("WScript.Network")
CurrentUserName = WshNetwork.UserName
Set WshNetwork = Nothing
End Function
' Возвращает "ADsPath" по "SAMAccountName" пользователя
Function ADsPathUser(UserName)
Set RootDSE = GetObject("LDAP://RootDSE")
Set Connection = CreateObject("ADODB.Connection")
Connection.Provider = "ADSDSOObject"
Connection.Open "ADs Provider"
Set Command = CreateObject("ADODB.Command")
Set Command.ActiveConnection = Connection
CommandString = "<" & "LDAP://" & RootDSE.Get("defaultNamingContext") & ">" & ";" & "(&(objectCategory=Person)(objectClass=User)(SAMAccountName=" & UserName & "))" & ";" & "ADsPath" & ";" & "Subtree"
Command.CommandText = CommandString
Command.Properties("Page Size") = 1000
Command.Properties("Size Limit") = 1
Command.Properties("Timeout") = 30
Set RecordSet = Command.Execute
ADsPathUser = RecordSet.Fields("ADsPath").Value
RecordSet.Close
Connection.Close
Set RecordSet = Nothing
Set Command = Nothing
Set Connection = Nothing
Set RootDSE = Nothing
End Function
' Возвращает "primaryGroupID" по "ADsPath"
Function IADsprimaryGroupID(ADsPath)
Set Object = GetObject(ADsPath)
IADsprimaryGroupID = Object.primaryGroupID
End Function
' Возвращает имя "Primary Group" по "ADsPath"
Function GetPrimaryGroup(ADsPath)
Set RootDSE = GetObject("LDAP://RootDSE")
Set Connection = CreateObject("ADODB.Connection")
Connection.Provider = "ADSDSOObject"
Connection.Open "ADs Provider"
Set Command = CreateObject("ADODB.Command")
Set Command.ActiveConnection = Connection
CommandString = "<" & "LDAP://" & RootDSE.Get("defaultNamingContext") & ">" & ";" & "(objectCategory=Group);distinguishedName,primaryGroupToken;subtree"
Command.CommandText = CommandString
'Command.Properties("Page Size") = 1000
'Command.Properties("Size Limit") = 1
'Command.Properties("Timeout") = 30
Set RecordSet = Command.Execute
If Err.Number <> 0 Then
WSCript.Echo "При поиске Primary Group произошла ошибка: " & Err.Description & "[" & Err.Number & "]"
End If
While Not Recordset.EOF
If Recordset.Fields("primaryGroupToken").Value = IADsprimaryGroupID(ADsPath) Then
GetPrimaryGroup = Recordset.Fields("distinguishedName").Value
End If
Recordset.MoveNext
Wend
RecordSet.Close
Connection.Close
Set RecordSet = Nothing
Set Command = Nothing
Set Connection = Nothing
Set RootDSE = Nothing
End Function

'************************************************************
' Процедуры вызываемая из wsf файла.
'************************************************************

function mpd(grp,share,letter)
if lcase(grp)="everyone" then mapdrv letter,share
if dic.count=0 then dictionary
if dic.item(lcase(grp))=lcase(grp) then
mapdrv letter,share
exit function
end if
End function

function mpd_user(user,share,letter)
Set WshNetwork = WScript.CreateObject("WScript.Network")
if lcase(user)=lcase(WshNetwork.UserName) then
mapdrv letter,share
exit function
end if
end function
'*************************************************************
' Конец скрипта
'*************************************************************

'*************************************************************
' Блок который заполняют
' "Администраторы" на местах
'*************************************************************
<job>
<script language = "VBScript" SRC= "logon.vbs"/>
<script language = "vbscript">
'*************************************************************
' Скрипт подключения сетевых дисков пользователю на основе
' принадлежности пользователя к группам
'
' Необходимо корректно заполнить строку вызова внешней процедуры:
' mpd "_наименование группы в AD_","_Путь к шаре(ресурсу)_","_Буква диска_"
' Наименование группы, путь к шаре и буква диска пишутся в кавычках через запятую, скобки не нужны
' Наименование группы пишется так же как оно записано в AD без учёта регистра.
'
' Примеры:
' mpd "domain users","\\server\netlogon","z:" - Правильное написание будет работать
' mpd "Domain Users","\\server\netlogon","z:" - Правильное написание будет работать
' mpd ("Domain Users","\\server\netlogon","z:") - Не будет работать
' mpd "domain users","\\server\function\","x:" - Не будет работать
' mpd "domain users","\\server\refbook","w:\" - Не будет работать
'
'
'*************************************************************
mpd "domain admins","\\server\install","q:"

'*************************************************************
</script>
</job>
[/more]
Автор: Sish
Дата сообщения: 22.02.2006 15:00
IliaKot
Такие длинный посты лучше под тег [more] прятать.
Автор: adminq
Дата сообщения: 28.02.2006 08:23
Здравствуйте товарищи! Вот вопросик насущный.

Домен. 1000 юзеров. каждому электронную почту настроить. автоматом. (тоесть прописать конкретную учетную запись в ..допустим аутлук экспресс)

искал искал нигде про такое нет и слуху, может глаза лучше по утрам мыть?

Спасибо!
Автор: DOE_JOHN
Дата сообщения: 02.03.2006 12:16
Пробую выключать удаленно комп под 2003 server.
[more]
dim OpSysSet, obj
Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate," & _
"(Shutdown)}//192.168.*.*/root/cimv2").ExecQuery _
("SELECT * FROM Win32_OperatingSystem" &_
" WHERE Primary=true")

For Each obj In OpSysSet
obj.Win32Shutdown(8)
Next
[/more]

Срабатывает если на удаленном компе пользователь залогинен или не входил. Если пользователь вошой и комп заблокирован то не работает. Или если пользователь залогин выключить удалено не получиться?
Автор: FreemanRU
Дата сообщения: 02.03.2006 13:12
DOE_JOHN
мама родная, зачем такие сложности? shutdown /? не спасает?
Автор: pincer
Дата сообщения: 02.03.2006 13:25
Мучался как то
Скрипт для получения SID из AD
------------------------------------------------------------------------------------
On Error Resume Next
Dim Tmp, x, b, Sid
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objCmp = GetObject("LDAP://" & strComputerDN)
Sid = objCmp.objectSID
gSID = "S-1-5-"&Convert(16,19)&"-"&Convert(12,15)&"-"&Convert(8,11)&"-" _
&Convert(4,7)&"-"&Convert(0,3)
Set objGroup = Nothing

function Convert(u,l)
Tmp = ""
For x = UBound(Sid)-u to UBound(Sid)-l Step -1
b = AscB(MidB(SID, x + 1))
Tmp = Tmp & Hex(b \ 16) & Hex(b And 15)
Next
Convert = Clng("&H" & Tmp)
end function
wscript.echo(gSID)
Автор: DOE_JOHN
Дата сообщения: 02.03.2006 13:56
FreemanRU
Да как то запамятовал. 'Мы не ищем легких путей'
Автор: Nello
Дата сообщения: 02.03.2006 14:07
adminq

Цитата:
Здравствуйте товарищи! Вот вопросик насущный.

Домен. 1000 юзеров. каждому электронную почту настроить. автоматом. (тоесть прописать конкретную учетную запись в ..допустим аутлук экспресс)

искал искал нигде про такое нет и слуху, может глаза лучше по утрам мыть?

Спасибо!

Этот скрипт запускается на юзеровском компьютере. Нужны права админа этого компьютера.
В моем случае имя пользователя и почтовый алиас подставляеnся из AD
Т. е. подразуменвается, что почтовый логин юзера совпадает с samaccountname.
Outlook Express:
[more]

set oShell = wscript.CreateObject("Wscript.Shell")

Function main()
    dim username, domain
    'Ищем логин пользователя:
Set objNetwork = Wscript.CreateObject("Wscript.Network")
samUser = objNetwork.UserName
'Ищем имя прользователя:
Const adStateOpen = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim objConn 'ADO Connection object
Dim objRS 'ADO Recordset object
Set objConn = CreateObject("ADODB.Connection")
    objConn.Provider = "ADSDSOObject"
    objConn.Open ""
    If not(objConn.State = adStateOpen) Then
     WScript.Quit(1)
    End If
эЗдесь надо подставить свой путь LDAP
    Set objRS = objConn.Execute _
    ("<LDAP://dc=domain,dc=local>;(&(ObjectClass=User)(ObjectCategory=Person)(samaccountname="&samuser&"));" & "Name,mail;SubTree")
    While Not objRS.EOF

DisplayedName=objRS.Fields.Item("name").Value
objRS.MoveNext
Wend


    
    Ualias = inputbox("Введите префикс электронной почты(та часть e-mail, которая до @)","Outlook Express Profile Creator","Ualias")
    DisplayedName=inputbox("Введите ваше имя и фамилию","Outlook Express Profile Creator",DisplayedName)
    username = inputbox("Введите ваш логин Windows","Outlook Express Profile Creator",samUser)
    If username = "" Then
        wscript.Quit(0)
    End If
    If DisplayedName = "" Then
        wscript.Quit(0)
    End If
    If ualias = "" Then
        wscript.Quit(0)
    End If

    If username = "Username" Then
        while username = "Enter your Email PREFIX or USERNAME"
            username = inputbox("Введите ваш логин Windows","Outlook Express Profile Creator","Username")
                If username = "" Then
                    wscript.Quit(0)
                End If
        wend
    End If
эздесь ставьте ваш почтовый домен                    
    domain = inputbox("Введите Ваш почтовый домен (та часть e-mail, которая после @)","Outlook Express Profile Creator","domain.ru")
    
    If domain = "" Then
        wscript.Quit(0)
    End If
    
    If domain = "Domain" Then
        while domain = "Enter Your Domain name Here"
            username = inputbox("Введите Ваш почтовый домен (та часть e-mail, которая после @)","Outlook Express Profile Creator","Domain")
                If domain = "" Then
                    wscript.Quit(0)
                End If
        wend
    End If


objConn.Close
Set objRS = Nothing
call placeMailSettings(username, domain,ualias,DisplayedName)
    
msgbox("Настройка Outlook Express Configuration окончена, запустите Outlook Express и введите ваш пароль.")
End Function

Function regRead(regStr)
regRead = oShell.RegRead(regStr)
End Function

Function regWrite(val1,val2,val3)
oShell.RegWrite val1,val2,val3
End Function

Function regDelete(regStr)
call oShell.RegDelete(regStr)
End Function



'----------------------------------------------------------------------------------------
' Place new settings for Mail
'----------------------------------------------------------------------------------------

Function placeMailSettings(theUsername, theDomain, theAlias, theDisplayname)
    On Error Resume Next
    dim newAccountNum, numKeyStr
    dim username, domain
    newAccountNum = regRead("HKCU\Software\Microsoft\Internet Account Manager\Account Name")
    
    If newAccountNum = "" Then
        newAccountNum = "00000001"
    ElseIf newAccountNum < 9 Then
        newAccountNum = "0000000" & newAccountNum
    Else
        newAccountNum = "000000" & newAccountNum    
    End If
    
    numKeyStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\"
    call regWrite(numKeyStr, newAccountNum, "REG_SZ")
    
    username = theUsername
    domain = theDomain

    'Add Account Name
     accName = thealias & "@" & domain
     accNameStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\Account Name"
     call regWrite(accNameStr, accName, "REG_SZ")

    'Add Connection Type
     conType = "3"
     conTypeStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\Connection Type"
     call regWrite(conTypeStr, conType, "REG_DWORD")
    
    'Delete Connection Id
     conId = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\ConnectionId"
     call regDelete(conId)
    
    'Delete Account Id
     accId = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\Account ID"
     call regDelete(accId)

    'Delete IMAP Server
     imapSvr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\IMAP Server"
     call regDelete(imapSvr)

    'Delete HTTP Mail Server
     httpSvr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\HTTPMail Server"
     call regDelete(httpSvr)

    'Set POP3 Server
     pop3svr = "rcmail"
     pop3svrStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\POP3 Server"
     call regWrite(pop3svrStr, pop3svr, "REG_SZ")

    'Set POP3 Username
     pop3usr = username & "@" & domain
     pop3usrStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\POP3 User Name"
     call regWrite(pop3usrStr, pop3usr, "REG_SZ")

    'Delete POP3 Password 2
     popPwdStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\POP3 Password2"
     call regDelete(popPwdStr)

    'Set POP3 Use Sicily
     useSicily = "0"
     useSicilyStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\POP3 Use Sicily"
     call regWrite(useSicilyStr, useSicily, "REG_DWORD")

    'Set POP3 Prompt for Pw
     var promptPw = "1"
     var promptPwStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\POP3 Prompt for Password"
     call regWrite(promptPwStr, promptPw, "REG_DWORD")
    
    'Set SMTP Server
     smtpSvr = "rcmail"
     smtpSvrStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\SMTP Server"
     call regWrite(smtpSvrStr, smtpSvr, "REG_SZ")
    
    'Set SMTP Display name
     smtpDisp = ThedisplayName
     smtpSvrStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\SMTP Display Name"
     call regWrite(smtpSvrStr, smtpDisp, "REG_SZ")

    'Set SMTP E-mail address
     smtpEmail = thealias & "@" & domain
     smtpEmailStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\SMTP Email Address"
     call regWrite(smtpEmailStr, smtpEmail, "REG_SZ")

    'Set SMTP Use Sicily
     smtpUseSicily = "2"
     smtpUseSicilyStr = "HKCU\Software\Microsoft\Internet Account Manager\Accounts\" & newAccountNum & "\SMTP Use Sicily"
     call regWrite(smtpUseSicilyStr, smtpUseSicily, "REG_DWORD")
    
    'Set New Account to default
     defAccStr = "HKCU\Software\Microsoft\Internet Account Manager\Default Mail Account"
     call regWrite(defAccStr, newAccountNum, "REG_SZ")
    
    'Increment future account number
     futAccNum = newAccountNum + 1
     futAccNumStr = "HKCU\Software\Microsoft\Internet Account Manager\Account Name"
     call regWrite(futAccNumStr, futAccNum, "REG_DWORD")
    
     msgbox("POP3 Server Set to: " & pop3svr & chr(10) & "SMTP Server Set to: " & smtpSvr)
End Function


call main()
[/more]
Автор: DOE_JOHN
Дата сообщения: 02.03.2006 14:18
Только проблема в другом. Надо выключить залоченый комп удаленно. Если он не залочен то оба способа работают.
Автор: FreemanRU
Дата сообщения: 02.03.2006 14:25
DOE_JOHN
и буквачка -f не спасает?
Автор: DOE_JOHN
Дата сообщения: 03.03.2006 08:04
FreemanRU
Нет не спасает. А еще разные пользователи на компах, хотя и оба админы. И на 2003 server контроллер домена, так для опытов. И комп с которого хочу выключать тоже в домене.
Автор: rosalin
Дата сообщения: 03.03.2006 08:34
Уважаемые All
Подскажите как скрыть запуск vbs скрипта
В logon
Автор: Chirk
Дата сообщения: 07.03.2006 09:43
Имеем такой скрипт, и соответственно с помощью него хотим установить Драйвер принтера, но не работает в чём проблемма не могу понять может подскажите??

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
objWMIService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege", True

Set objDriver = objWMIService.Get("Win32_PrinterDriver")

objDriver.Name = "hp LaserJet 1300 PCL 6"
objDriver.SupportedPlatform = "Windows NT x86"
objDriver.Version = "3"
objDriverPath = "C:\1300"
objInfname = "hp1300m6.inf"
intResult = objDriver.AddPrinterDriver(objDriver)
Автор: RDV1984
Дата сообщения: 07.03.2006 20:07
Hi all.
Можно ли с помошью JScript или VBScript при входе определенного пользователя запустить программу как службу ?
Автор: Uriu
Дата сообщения: 08.03.2006 07:48
rosalin
Если нужно что либо запустить в скрытом окне (процесс будет виден только в диспетчере задач), то вот пример, лишнее закоментируйте или удалите

[more]
Код: '*******************************************************************
' Язык: VBScript
' Описание: Запуск процесса с заданными параметрами
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim objService ' Объект SWbemServices
Dim objProcess ' Объект SWbemObject (класс Win32_Process)
Dim objStartup ' Объект SWbemObject (класс Win32_ProcessStartup)
Dim objConfig ' Объект SWbemObject (экземпляр класса
' Win32_ProcessStartup)
Dim iErr ' Значения, возвращаемое методом
Dim NotepadID ' Идентификатор созданного процесса Notepad.exe
Dim wscriptID ' Идентификатор созданного процесса WScript.exe

' Определяем константы
Const WINDOW = 9 'Константа от 0-12 разные способы отображения окна, 11-12-видно только в диспетчере задач
Const Priorit = 256 ' Константа определяет приоритет 32,64,128,256,16384,32768- "Выше среднего"
' 256 - "высокий", 16384-"ниже среднего"

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "." ' Точка для локального, имя для удаленного

' Подключаемся к пространству имен WMI
Set objService = GetObject("WinMgmts:\\" & _
strComputer & "\" & "Root\CIMV2")

' Создаем новый экземпляр класса Win32_ProcessStartup- конфигуратор нового процесса
Set objStartup = objService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_

' Устанавливаем режим запуска в окне (свернуть,развернуть,скрыть вообще)
objConfig.ShowWindow =WINDOW

' Устанавливаем приоритет в зависимости от константы
objConfig.PriorityClass = Priorit

' Еще раз подключаемся к пространству имен WMI
Set objProcess = GetObject("WinMgmts:\\" & _
strComputer & "\" & "Root\CIMV2" & ":Win32_Process")

'============= Запускаем скрипт ========================
' Запускаем скрипт (строка должна быть такой же как если бы из cmd.exe запускать)
iErr=objProcess.Create _
("WScript.exe C:\Test\Test.vbs",Null , objConfig, wscriptID)
' Проверяем ошибку запуска
If iErr <> 0 Then
' Выводим на экран сообщение об ошибке
WScript.Echo "При запуске процесса WScript произошла ошибка"
Else
' Выводим на экран сообщение об удачном запуске
WScript.Echo "Сценарий запущен, PID " & wscriptID
End If
'************************* Конец ***********************************

'============= Запускаем блокнот =============================
' Здесь все по прежнему
' Запускаем блокнот методом Create
iErr=objProcess.Create _
("Notepad.exe", Null, objConfig, NotepadID)

' Проверяем ошибку запуска
If iErr <> 0 Then
' Выводим на экран сообщение об ошибке
WScript.Echo "При запуске процесса NOTEPAD.EXE произошла ошибка"
Else
' Выводим на экран сообщение об удачном запуске
WScript.Echo "Процесс NOTEPAD.EXE запущен, PID " & NotepadID
End If
'******************** Конец ******************************************
Автор: rosalin
Дата сообщения: 09.03.2006 08:21
Уважаемый Uriu
Подскажи как в моем случае максимально скрыть выполнение скрипта вот код

[more=Сам код..]
'----------------------------------------------------------------------------------------
' -- some kind of (c) by tomcat --
' This VB-script must be executed in "everyday mode" by some kind of Sheduler
' It runs backup program (nnbackup, see http://nncron.ru) that makes dumps from level 0 to level 3
' 0 - every quorter at the last day of quoter
' 1 - every month at the last day of month
' 2 - every week on Fridays
' 3 - every day
' Trick is: if some level's backup hadn't been executed at day it should be,
' script executes it at next start
' See consts for tuning:
' PathToExe and Arg_N concatenates together
' In RegSection script stores execution dates - don't touch them manually if unsure!
' Script writes log-file Scriptname.log
' Script must be in one folder with nnbackup.exe, else edit PathToExe and Arg_N
'----------------------------------------------------------------------------------------
Option Explicit

' command strings to execute
Const PathToExe = "nnbackup.exe"
Const Arg_0 = " -f cfg\d0.cfg"
Const Arg_1 = " -f cfg\d1.cfg"
Const Arg_2 = " -f cfg\d2.cfg"
Const Arg_3 = " -f cfg\d3.cfg"


Const RegSection = "HKCU\Software\Backup.VBS\" ' registry section where stores backup dates
Const LMarkName = "DateLevel_" ' template for adding digit of level for registry

Dim WSHL ' WshShell
Dim Processed ' boolean, signs level successfully processed
Const SW_SHOWMINNOACTIVE = 7

Set WSHL = Wscript.CreateObject("Wscript.Shell")

Dim fso
Dim LogFileStr, LogFile
Const ForAppending = 8
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
' get name of log-file - at same dir and same name with .vbs self
LogFileStr = Left(Wscript.ScriptFullName, Len(Wscript.ScriptFullName) - 3) & "log"
Set LogFile = fso.OpenTextFile(LogFileStr, ForAppending, True) ' creates it, if absent

ProcessLevel 0
If Not Processed Then ProcessLevel 1
If Not Processed Then ProcessLevel 2
If Not Processed Then ProcessLevel 3
If Not Processed Then
LogMsg "Processing skipped all levels up to 3"
Wscript.Quit 2
End If

LogFile.Close



'++++++++++++++++++++++++++++++++ Functions +++++++++++++++++++++++++++++++++

Function ReadRegistry(RegPath)
On Error Resume Next
ReadRegistry = WSHL.RegRead(RegPath)
Err.Clear
End Function

Sub ProcessLevel(LevelNumber)
Dim LMark ' LMarkName with digit of level : DateLevel_0, for ex.
Dim LevelDate, LastPeriodDate
Dim Sign

Processed = False
LMark = LMarkName & LevelNumber
LevelDate = ReadRegistry(RegSection & LMark)
' level record found
If LevelDate <> "" Then
If IsDate(LevelDate) Then
Select Case LevelNumber
Case 0
Sign = "q" ' quarter
LastPeriodDate = LastDayOfQuarter(Date)
Case 1
Sign = "m" ' month
LastPeriodDate = LastDayOfMonth(Date)
Case 2
Sign = "ww" ' week
LastPeriodDate = LastWorkdayOfWeek(Date)
Case 3
Sign = "d" ' day
End Select
' if now is last day of period or
If (Date = LastPeriodDate) And (Abs(DateDiff(Sign, LevelDate, Date, vbMonday)) = 1) _
Or (Abs(DateDiff(Sign, LevelDate, Date, vbSaturday)) > 1) Then
ExecuteBackup LevelNumber
Processed = True
End If
Else
' raise error and quit
LogMsg "Error: In '" & RegSection & "': date record for " & LMark & " seems invalid."
Wscript.Quit 1
End If

Else
' level record not found
ExecuteBackup LevelNumber
Processed = True
End If

End Sub

'*************************** Functions for ExecuteBackup()**********************
Function LastDayOfQuarter(ADate)
' returns date representing the last day of quarter for which given ADate belongs
Dim sDate
' give the first day of the last month of given date' quarter
sDate = DateSerial(Year(ADate), 3 * DatePart("q", ADate, vbUseSystemDayOfWeek, vbUseSystem), 1)
' give the first day of the next month
sDate = DateAdd("m", 1, sDate)
' subtract one day backward
LastDayOfQuarter = DateAdd("d", -1, sDate)
End Function

Function LastDayOfMonth(ADate)
Dim sDate
' returns date representing the last day of month of given ADate
' give the first day of the next month
sDate = DateAdd("m", 1, DateSerial(Year(ADate), Month(ADate), 1))
' subtract one day backward
LastDayOfMonth = DateAdd("d", -1, sDate)
End Function

Function LastWorkdayOfWeek(ADate)
' returns date representing Friday at week of given ADate
Const vbFriday = 5 ' in Russia
LastWorkdayOfWeek = DateAdd("d", vbFriday - Weekday(ADate, vbUseSystemDayOfWeek), ADate)
End Function
'**************************************************************************

Function ExecuteBackup(LevelNumber)
Dim ExecStr, ExecExitCode
Dim CurDate, PrevDate, RecDate

If Not fso.FileExists(PathToExe) Then
LogMsg "Abort: external not found: '" & PathToExe & "'"
Wscript.Quit 3
End If

Select Case LevelNumber
Case 0 ' Quarter
ExecStr = PathToExe & Arg_0
CurDate = LastDayOfQuarter(Date)
PrevDate = LastDayOfQuarter(DateAdd("q", -1, Date))
Case 1 ' Month
ExecStr = PathToExe & Arg_1
CurDate = LastDayOfMonth(Date)
PrevDate = LastDayOfMonth(DateAdd("m", -1, Date))
Case 2 ' Week
ExecStr = PathToExe & Arg_2
CurDate = LastWorkdayOfWeek(Date)
PrevDate = LastWorkdayOfWeek(DateAdd("w", -1, Date))
ExecuteAdditionalWeekBackup
Case 3 ' Day
ExecStr = PathToExe & Arg_3
End Select

LogMsg "Execute external: '" & ExecStr & "'"
ExecExitCode = WSHL.Run(ExecStr, SW_SHOWMINNOACTIVE, True)

If ExecExitCode = 0 Then
If LevelNumber = 3 Then 'if day backup then not need in all this date tricks
WSHL.RegWrite RegSection & LMarkName & LevelNumber, Date
LogMsg "Level '" & LevelNumber & "' proceed successfully. Record basepoint date: " & Date
Else
' real processing date
WSHL.RegWrite RegSection & "Real_" & LMarkName & LevelNumber, Date
' basepoint (referenced) date
If Abs(DateDiff("d", CurDate, Date, vbUseSystemDayOfWeek, vbUseSystem)) < DateDiff("d", PrevDate, Date, vbUseSystemDayOfWeek, vbUseSystem) Then
RecDate = CurDate
Else
RecDate = PrevDate
End If
WSHL.RegWrite RegSection & LMarkName & LevelNumber, RecDate
LogMsg "Level '" & LevelNumber & "' proceed successfully. Record basepoint date: " & RecDate
End If
Else
LogMsg "Error: external returns non-zero exit code: " & ExecExitCode
End If

End Function

Sub ExecuteAdditionalWeekBackup()
Dim ExecStr, ExecExitCode
' if need some additional week backups, for ex. - email
ExecStr = PathToExe & " -f cfg\bat.cfg"
ExecExitCode = WSHL.Run(ExecStr, SW_SHOWMINNOACTIVE, True)
If ExecExitCode = 0 Then
LogMsg "Additional week backup successfully completed"
Else
LogMsg "Error: Additional week backup returns non-zero exit code: " & ExecExitCode
End If
End Sub

Sub LogMsg(Msg)
LogFile.WriteLine Now & " " & Msg
End Sub

[/more]
Автор: FreemanRU
Дата сообщения: 09.03.2006 11:17
Необходим инстумент командной строки для настройки безопасности в AD. Кто знает что-нить подобное?

Добавлено:
Сам отвечу на свой вопрос:
Здесь есть пример скрипта

[more=Статья из TechNet (не из technet.microsoft.com)]
Part 1: Granting Extended Rights
Whenever people try to explain what Active Directory is (or isn’t), they invariably use the analogy, “Active Directory is like a phone book.” That’s a perfectly valid analogy. After all, phone books are used to store relevant information about people, businesses, government organizations, and other entities. Likewise, Active Directory is used to store relevant information about users, computers, printers, and other entities. Compare the ability to quickly and easily look up information in a phone book with the ability to quickly and easily look up information in Active Directory, and you have a very handy – and very appropriate – metaphor.

Of course, an equally valid analogy would be to say that “Active Directory is like the file system.” The file system is composed of securable objects: you can control, to a very fine degree, the files and folders users can access, and what type of access each user is allowed. If you want to block a group of users from accessing a folder and its contents you can do so. If you want to give another group of users read-only access to that folder, you can do that as well. You can even allow User A unlimited access to the folder … well, except for this file, which User A is allowed to read, but not to modify. All of these access permissions are managed using the security descriptor attached to each file and folder.

Active Directory operates in a similar fashion. Objects stored in Active Directory – user accounts, computer accounts, what-have-you – are all securable objects: you can control, to a very fine degree, the objects users can access, and what type of access each user is allowed. Active Directory objects all have a security descriptor very similar to the security descriptor attached to files and folders. For example, in Active Directory Users and Computers, right-click a user account and then click Properties. In the resulting dialog box, click the Security tab.

As you can see, it’s a security descriptor, one that lists trustees (users or groups who have been granted or denied access to the object), along with the permissions (Read, Write, Full Control, etc.) they have been granted (or denied). Allowing for the differences between an Active Directory object and a file or folder, this security descriptor looks very much like a security descriptor you would find attached to a file system object.

Active Directory Extended Rights
Much of Active Directory security involves giving a user or group read or write access to an object, or to a specified property of that object. (For example, you can give someone the right to modify another user’s home phone number without giving them the right to modify any other attribute of that account.) However, there are additional rights – known as extended rights – that don’t involve read/write access to individual attributes; instead, they involve carrying out specific tasks, such as changing a user’s password. There are 39 extended rights, including 4 that apply to user accounts. These four extended rights are shown in Table 1. A complete set of extended rights can be found on the Extended Rights Reference page.

Table 1. Extended Rights Applicable to User Accounts

Extended Right Description
Change Password {ab721a53-1e2f-11d0-9819-00aa0040529b} Enables you to change the password on a user account. You must know the user’s current password in order to provide them with a new password.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


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