Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - создание списка пк, на котором скрипт уже выполнялся

Ответить
Настройки темы
VBS/WSH/JS - создание списка пк, на котором скрипт уже выполнялся

Аватара для ejik_off

Старожил


Сообщения: 473
Благодарности: 11

Профиль | Отправить PM | Цитировать


Добрый день!!!
Ребята помогите допилить скрипт сам ноль в 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

Отправлено: 11:39, 21-05-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


ejik_off, не надо писать «куда-нибудь в шару». Есть общепринятый способ — использование реестра. Локального.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:56, 21-05-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ejik_off

Старожил


Сообщения: 473
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата Iska:
Есть общепринятый способ — использование реестра. Локального. »
а как это сделать

Отправлено: 17:12, 21-05-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Например, так: WMI Tasks: Registry (Windows).

P.S. MSDN — наше всё.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 21-05-2014 | #4


Аватара для ejik_off

Старожил


Сообщения: 473
Благодарности: 11

Профиль | Отправить PM | Цитировать


Я в программировании полный 0, поэтому и обратился сюда. С добавлением ключа в реестр я понял, но как это написать в скрипте?

Отправлено: 06:51, 22-05-2014 | #5


Аватара для ejik_off

Старожил


Сообщения: 473
Благодарности: 11

Профиль | Отправить PM | Цитировать


С проверкой ключа в реестре получилось,Iska спасибо за ссылку!
теперь вопрос такой, в скрипте как я понял, есть строки которые вроде как должны копировать ярлык в автозагрузку. Но при запуске скрипта не копируется ярлык в авторан. Как можно найти ошибку?

Отправлено: 13:26, 26-05-2014 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 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"
Проверьте, есть ли данная запись в реестре.

Отправлено: 14:20, 26-05-2014 | #7


Аватара для ejik_off

Старожил


Сообщения: 473
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата 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, 26-05-2014 в 14:43.


Отправлено: 14:29, 26-05-2014 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 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…» папками манипулировать. У Вас какой?

Кстати, ошибка точно на этой строке?

Отправлено: 16:08, 26-05-2014 | #9


Аватара для ejik_off

Старожил


Сообщения: 473
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата Iska:
Там нужно так:
Код:
If Not oFSO.FolderExists(strDestinationPath) Then
oFSO.CreateFolder strDestinationPath
End If
Прочее должно исполняться независимо от предварительного отсутствия папки. »
Я уже запутался в этих циклах
Цитата Iska:
Простой пользователь — да, не может. Но он не может и с «AllUsers…» папками манипулировать. У Вас какой? »
Скрипт будет запускаться у обычных юзерах.
Цитата Iska:
Кстати, ошибка точно на этой строке? »
Да.

Отправлено: 07:03, 27-05-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - создание списка пк, на котором скрипт уже выполнялся

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Создание группы файлов Excel на основе списка Serg2010 Скриптовые языки администрирования Windows 4 23-03-2013 00:43
Создание группы файлов Excel на основе списка Serg2010 AutoIt 1 19-03-2013 05:43
[решено] Передать в скрипт название файла, на котором кликнули Dm666 AutoIt 2 08-02-2011 22:40
Прочее - Не виден общий ресурс (принтер) и сам ПК на котором он расшарен в домене wrongdna Сетевые технологии 4 23-09-2010 11:49
Проблема с кнопкой. И еще надо чтобы $form закрылся но скрипт бы выполнялся дальше JaguarSP AutoIt 4 20-04-2010 20:24




 
Переход