 |
|
создание списка пк, на котором скрипт уже выполнялся
Добрый день!!!
Ребята помогите допилить скрипт сам ноль в vbs-скриптах. Вообщем суть проблемы такая:
с помощью групповых политик на машины пользователей ставится миранда и копируется папка с настроенной мирандай, все это через логон-скрпт. Нужно что бы скрипт после удачного копирования взял названия компа и записал куда-нибудь в шару,
и при следующем запуске скрипта, он должен смотреть нет ли имени машины в списке, если нет то запускается. Как то так.
вот листинг самого скрипта:
Код:
set WshShell = WScript.CreateObject("WScript.Shell")
set oFso = CreateObject("Scripting.FileSystemObject")
strComputerName = WshShell.ExpandEnvironmentStrings("%computername%")
If InStr(LCase(strComputerName), LCase("TNS-")) = 0 Then
KillProcess()
set objVer = WshShell.exec("%comspec% /c ver")
strWindowsVer = objVer.stdout.readall
strWindows = WshShell.ExpandEnvironmentStrings("%WinDir%")
strWindowsOS = WshShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")
strAppData = WshShell.ExpandEnvironmentStrings("%APPDATA%")
strCurrentDir = oFSO.GetParentFolderName(Wscript.ScriptFullName)
strDesktop = WshShell.SpecialFolders("Desktop")
strAllUsersPrograms = WshShell.SpecialFolders("AllUsersPrograms")
strAllUsersStartup = WshShell.SpecialFolders("AllUsersStartup")
strSourcePath = "\\intec.tns-intec.kz\sysvol\intec.tns-intec.kz\scripts\Miranda IM\"
strSourceFileVersion = oFso.GetFileVersion(strSourcePath & "miranda32.exe")
If CStr(strWindowsOS) = "x86" Then
strProgramFiles = WshShell.ExpandEnvironmentStrings("%ProgramFiles%")
Else
strProgramFiles = WshShell.ExpandEnvironmentStrings("%ProgramFiles(x86)%")
End If
strDestinationPath = strProgramFiles & "\Miranda IM\"
strDestinationFileVersion = oFso.GetFileVersion(strDestinationPath & "miranda32.exe")
If Not oFSO.FolderExists(strDestinationPath) Then
oFSO.CreateFolder(strDestinationPath)
return = WshShell.Run("xcopy " & chr(34) & strSourcePath & "*" & chr(34) & " " & chr(34) & strDestinationPath & chr(34) & " /I /E /H /Y")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Miranda IM.lnk")
oShellLink.TargetPath = strDestinationPath & "miranda32.exe"
oShellLink.IconLocation = strDestinationPath & "miranda32.exe, 0"
oShellLink.Description = "Miranda IM"
oShellLink.Save()
If Not oFSO.FileExists(strAllUsersPrograms & "\Miranda IM.lnk") Then
wscript.echo strDesktop & "\Miranda IM.lnk", strAllUsersPrograms & "\Miranda IM.lnk"
oFSO.CopyFile strDesktop & "\Miranda IM.lnk", strAllUsersPrograms & "\Miranda IM.lnk"
End If
If oFSO.FileExists(strAllUsersStartup & "\Miranda IM.lnk") Then
oFSO.DeleteFile strAllUsersStartup & "\Miranda IM.lnk"
End If
If Not oFSO.FileExists(strWindows & "\krb5.ini") Then
oFSO.CopyFile strCurrentDir & "\krb5.ini", strWindows & "\krb5.ini"
End If
If InStr(strWindowsVer, "Windows XP") > 1 Then
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\AllowTGTSessionKey", 1, "REG_DWORD"
Else
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\AllowTGTSessionKey", 1, "REG_DWORD"
End If
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Miranda", strDestinationPath & "miranda32.exe", "REG_SZ"
Else
wscript.echo strSourceFileVersion
wscript.echo strDestinationFileVersion
If strSourceFileVersion <> strDestinationFileVersion Then
return = WshShell.Run("xcopy " & chr(34) & strSourcePath & "*" & chr(34) & " " & chr(34) & strDestinationPath & chr(34) & " /I /E /H /Y")
wscript.echo return
End If
End If
End If
Sub KillProcess()
strComputer = "."
strProcess = "miranda32.exe"
set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strProcess & "'")
For Each objProcess In colProcessList
objProcess.Terminate()
Next
End Sub
|
ejik_off, не надо писать «куда-нибудь в шару». Есть общепринятый способ — использование реестра. Локального.
|
Цитата:
Цитата Iska
Есть общепринятый способ — использование реестра. Локального. »
|
а как это сделать
|
Я в программировании полный 0, поэтому и обратился сюда. С добавлением ключа в реестр я понял, но как это написать в скрипте?
|
С проверкой ключа в реестре получилось,Iska спасибо за ссылку!
теперь вопрос такой, в скрипте как я понял, есть строки которые вроде как должны копировать ярлык в автозагрузку. Но при запуске скрипта не копируется ярлык в авторан. Как можно найти ошибку?
|
Цитата:
Цитата ejik_off
в скрипте как я понял, есть строки которые вроде как должны копировать ярлык в автозагрузку. »
|
Вроде как должны удалять файл ярлыка из автозагрузки:
Код:
If oFSO.FileExists(strAllUsersStartup & "\Miranda IM.lnk") Then
oFSO.DeleteFile strAllUsersStartup & "\Miranda IM.lnk"
End If
И вроде как создавать запись в реестре:
Код:
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Miranda", strDestinationPath & "miranda32.exe", "REG_SZ"
Проверьте, есть ли данная запись в реестре.
|
Цитата:
Цитата Iska
Проверьте, есть ли данная запись в реестре. »
|
Такой записи нет
Вот это условие пропускается
Код:
If Not oFSO.FolderExists(strDestinationPath) Then
oFSO.CreateFolder(strDestinationPath)
return = WshShell.Run("xcopy " & chr(34) & strSourcePath & "*" & chr(34) & " " & chr(34) & strDestinationPath & chr(34) & " /I /E /H /Y")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Miranda IM.lnk")
oShellLink.TargetPath = strDestinationPath & "miranda32.exe"
oShellLink.IconLocation = strDestinationPath & "miranda32.exe, 0"
oShellLink.Description = "Miranda IM"
oShellLink.Save()
If Not oFSO.FileExists(strAllUsersPrograms & "\Miranda IM.lnk") Then
wscript.echo strDesktop & "\Miranda IM.lnk", strAllUsersPrograms & "\Miranda IM.lnk"
oFSO.CopyFile strDesktop & "\Miranda IM.lnk", strAllUsersPrograms & "\Miranda IM.lnk"
End If
If oFSO.FileExists(strAllUsersStartup & "\Miranda IM.lnk") Then
oFSO.DeleteFile strAllUsersStartup & "\Miranda IM.lnk"
End If
If Not oFSO.FileExists(strWindows & "\krb5.ini") Then
oFSO.CopyFile strCurrentDir & "\krb5.ini", strWindows & "\krb5.ini"
End If
If InStr(strWindowsVer, "Windows XP") > 1 Then
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\AllowTGTSessionKey", 1, "REG_DWORD"
Else
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\AllowTGTSessionKey", 1, "REG_DWORD"
End If
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Miranda", strDestinationPath & "miranda32.exe", "REG_SZ"
Else
После Else поставил
Код:
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Miranda", strDestinationPath & "miranda32.exe", "REG_SZ"
Вышла ошибка, код ошибки 80070005, сдается мне что пользователь не может в эту ветку писать.
|
Цитата:
Цитата ejik_off
Вот это условие пропускается »
|
Там нужно так:
Код:
If Not oFSO.FolderExists(strDestinationPath) Then
oFSO.CreateFolder strDestinationPath
End If
Прочее должно исполняться независимо от предварительного отсутствия папки.
Цитата:
Цитата ejik_off
После Else поставил
Код:
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Miranda", strDestinationPath & "miranda32.exe", "REG_SZ"
Вышла ошибка, код ошибки 80070005, сдается мне что пользователь не может в эту ветку писать. »
|
Простой пользователь — да, не может. Но он не может и с «AllUsers…» папками манипулировать. У Вас какой?
Кстати, ошибка точно на этой строке?
|
Цитата:
Цитата Iska
Там нужно так:
Код:
If Not oFSO.FolderExists(strDestinationPath) Then
oFSO.CreateFolder strDestinationPath
End If
Прочее должно исполняться независимо от предварительного отсутствия папки. »
|
Я уже запутался в этих циклах :)
Цитата:
Цитата Iska
Простой пользователь — да, не может. Но он не может и с «AllUsers…» папками манипулировать. У Вас какой? »
|
Скрипт будет запускаться у обычных юзерах.
Цитата:
Цитата Iska
Кстати, ошибка точно на этой строке? »
|
Да.
|
Время: 13:37.
© OSzone.net 2001-