Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   создание списка пк, на котором скрипт уже выполнялся (http://forum.oszone.net/showthread.php?t=282506)

ejik_off 21-05-2014 11:39 2353925

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


Iska 21-05-2014 14:56 2353987

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

ejik_off 21-05-2014 17:12 2354038

Цитата:

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

а как это сделать

Iska 21-05-2014 17:56 2354052

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

P.S. MSDN — наше всё.

ejik_off 22-05-2014 06:51 2354213

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

ejik_off 26-05-2014 13:26 2355867

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

Iska 26-05-2014 14:20 2355890

Цитата:

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

ejik_off 26-05-2014 14:29 2355897

Цитата:

Цитата 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, сдается мне что пользователь не может в эту ветку писать.

Iska 26-05-2014 16:08 2355926

Цитата:

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

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

ejik_off 27-05-2014 07:03 2356103

Цитата:

Цитата Iska
Там нужно так:
Код:
If Not oFSO.FolderExists(strDestinationPath) Then
oFSO.CreateFolder strDestinationPath
End If
Прочее должно исполняться независимо от предварительного отсутствия папки. »

Я уже запутался в этих циклах :)
Цитата:

Цитата Iska
Простой пользователь — да, не может. Но он не может и с «AllUsers…» папками манипулировать. У Вас какой? »

Скрипт будет запускаться у обычных юзерах.
Цитата:

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

Да.


Время: 13:37.

Время: 13:37.
© OSzone.net 2001-