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

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

Автор: YURETS777
Дата сообщения: 20.05.2010 13:11
Нужен VBS скрипт, который ищет и удаляет дублированные строки в массиве строк.
Или просто компактный код для сортировки строк в массиве.
Автор: vlary
Дата сообщения: 20.05.2010 13:52
YURETS777 В раздел "Музыка и кино" обращаться не пробовал?
Вроде давно уже не ньюб.
Программирование "удобняшек" на VBScript
Автор: YURETS777
Дата сообщения: 20.05.2010 14:06
vlary
Не ирронизируй, я в теме, сортировщик нужен для упорядочивания записей АД, выгруженных в массив строк.
Автор: YNY
Дата сообщения: 20.05.2010 16:31

Цитата:
YURETS777

1-ну это све зависит в каком массиве твои строки, 2-если строк очень много то будет бешенно тормозить))))))) [more=и примерно вот так будет выглядеть]
dim MyArrofStringsB() 'новый динамический массив
Dim k=-1 ' дабы нумерация была с нуля

for i=LBound(MyArrofStringsA) to UBound(MyArrofStringsA)

' 1(совпадающие элементы превращаем в пустые строки
for j=(LBound(MyArrofStringsA)+i+1) to UBound(MyArrofStringsA)
if MyArrofStringsA(i)=MyArrofStringsA(j) then MyArrofStringsA(j)=""
next j

'2(формируем новый динамический массив из не повторяющихся и не содержащих пустую строку 'элементов
if MyArrofStringsA(i)<>"" then
k=k+1
Redim Preserve MyArrofStringsB(k)
MyArrofStringsB(k)=MyArrofStringsA(i)
end if
next i

[/more], но сам вопрос не относится к администрированию, а, скорей всего, относится к программированию )
Автор: vlary
Дата сообщения: 20.05.2010 17:29

Цитата:
сортировщик нужен для упорядочивания записей АД,
От того, что админ поставит чашку кофе или кружку пива на свич или роутер, они не станут ни сетевым оборудованием, ни даже расходными материалами
Автор: arr1val
Дата сообщения: 20.05.2010 19:39

Цитата:
Из примеров и кусков собрал себе скриптик требуемый для работы. Подскажите, как дописать условие "если пользователь Root уже есть - ничего не делать" ?


Код: strUserName = "Admin"
strNewUserName = "Root"
strPassword = "password"
strComputer = "."
Set objUser = GetObject("WinNT://" & strComputer & "/" & strUserName & ", user")
Set objComputer = GetObject("WinNT://" & strComputer)
objComputer.MoveHere objUser.AdsPath, strNewUserName
Set objComputer = Nothing
Set objUser = Nothing
Set objUser = GetObject("WinNT://" & strComputer & "/" & strNewUserName & ", user")
objUser.SetPassword strPassword
objUser.SetInfo
Set objUser = Nothing


Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")
Set colAccounts = GetObject("WinNT://" & strComputer & "")
Set objUser = colAccounts.Create("user", "Admin")
objUser.SetPassword "password"
objUser.SetInfo
Set objGroup = GetObject("WinNT://" & strComputer & "/Администраторы,group")
Set objUser = GetObject("WinNT://" & strComputer & "/Admin,user")
objGroup.Add(objUser.ADsPath)
Автор: Dasky
Дата сообщения: 02.06.2010 16:44
добрый...
подскажите как можно сделать следующее:
в txt файле есть список имен всех компов в домене...на каждом установлен Far...требуется деинсталлировать его и поставить Far2...
спс...
Автор: YNY
Дата сообщения: 04.06.2010 14:27
Dasky [more=вот держи, пробуй]
const HKEY_LOCAL_MACHINE = &H80000002
'источник с новой версией
SSRP=""""&"\\MyShare\distr\MyApp"

bulC=1'-формат распознан

strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" &strComputer & "\root\default:StdRegProv")

VtCh="" '= номер нужной версии, к примеру из FarManager170.exe, равен v1.70
test3()

Sub Test3()

    
    Set WshShell = WScript.CreateObject("WScript.Shell")
    if VtCh=Test2("DisplayVersion") then
        WshShell.Popup "У вас уже установлена актуальная версия программы!", 5, "Результат попытки обновления FarManager:", 64
        exit sub
    end if
        on error resume next
        '- удаляем старую версию
        rezult=WshShell.Run (Test2("UninstallString"))    

        ' - конвертируем версию из v1.70 в 170
        VtCh=Mid(sValue,2,1) & Mid(sValue,4,Len(sValue)-3)    

        '- идем к месту хранения новой версии и если есть то устанавливаем
            
            rezult=WshShell.Run (SSRP & "\FarManager" & VtCh & ".exe ")
            
            if (IsEmpty(rezult)) then
                BtnCode = WshShell.Popup("Сетевой путь (" & SSRP &")"& vbCrlf & "либо файл (FarManager"& VtCh & ".exe)" & vbCrlf & "не найден!", 5, "Результат попытки обновления:")
            else
                BtnCode = WshShell.Popup("Процесс обновления успешно запущен!", 5, "Результат попытки обновления:")

            end if    
        

End Sub

Function Test2(strToChk)
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Far Manager"
strValueName = strToChk 'DisplayVersion и UninstallString
oReg.GetStringValue ,strKeyPath,strValueName,sValue
    if (IsNull(sValue)) then
        const HKEY_CURRENT_USER = &H80000001
        oReg.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,sValue
        'msgbox "Параметры программы в HKEY_CURRENT_USER" ''-установка не админом    
    end if
    '''msgbox IsNull(sValue) '-- вообще нет в реестре
'WScript.Echo "Far Manager_>DisplayVersion : " & sValue
if (sValue<>"") then
    Test2=sValue '="VXXX"
on error resume next
    


end if
End Function
[/more] пихаешь в ГПО и все будет работать если пользователи имеют права по кр мере опытных, а там где не нуна просто в журнале событий мбыть ошибки)


Автор: volkins
Дата сообщения: 04.06.2010 14:51
Добрый день всем!
Для корректной работы программы необходимо установить некоторые шрифты из сетевой папки (шрифты штрих-кода), чтобы при печати документов все было "красиво". Для решения поставленной задачи пытались
- производить установку шрифтов вручную.
однако это долго и после перезагрузки шрифты снова "слетают"
- использовать скрипт на vbs.
не на всех машинах корректно отрабатывал.

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

Помогите с решением данной задачи.
Автор: YNY
Дата сообщения: 05.06.2010 08:55
volkins
Цитата:
перезагрузки шрифты снова "слетают"


Вот статья от микрософт по установке шрифтов. Для запуска скрипта с админскими правами см. данный форум, но, я думаю, что прав опытного пользователя тоже должно хватить (т.к. опытным поль-м разрешена запись в каталог Fonts по умолчанию).
Если считаете, что VB не отрабатывает правильно, то пользуйтесь коммандой COPY из под коммсторки или в BAT файле!
Автор: Dasky
Дата сообщения: 07.06.2010 08:39
YNY
отписал в пм...
спс...
Автор: LightSpektr
Дата сообщения: 16.06.2010 08:13
Доброго времени суток. Возможно я не умею пользоваться поиском.
У меня стоит задача определить версию установленного офиса (2003, 2007, 2010) в домене. win xp/vista/seven. Не подскажете решение?

В идеале на выходе должен получиться *.txt файл вида %computername% - 2003/2007/2010
причём на машинах возможно наличие сразу 2-х версий. в этом случае нужно чтобы были написаны обе.
Автор: YNY
Дата сообщения: 16.06.2010 09:09
LightSpektr обращайся к YURETS777 -- он уже имеет ответ, т.к. сам этим интересовался)

На счет того как пользоваться поискм, если у кого проблемы: открывай "версия для печати" бразером, дави Ctrl+F и набирай что важно))))))))))))
Автор: LightSpektr
Дата сообщения: 16.06.2010 10:38
я имею ввиду что не очень могу сформулировать свой вопрос для поиска)
Сейчас сижу, бытаюсь наваять что-нить в виде батника. пока уткнулся в траблу с русскими кодировками. И я делаю это на XP. Фиг знает как оно будет на остальных виндах работать.
За информацию спасибо, но вопрос остаётся открытым пока. VBS я не умею.
Автор: wolf0425
Дата сообщения: 16.06.2010 11:52
LightSpektr проблемы с русскими кодировками лучше всего решаются переводом cmd в каждом батнике на использование кодировки 1251 и глобальным преключением фонта консоли на уникодный (люсиду).

а со сканом комов на предмет оффиса можно сделать "нечестно":

Код: for /f %%c in (comp.lst) do ping %%c -n 1 >nul && for /d %%a in ("\\%%c\c$\Program Files\Microsoft Office\OFFICE*") do 1>> office.lst echo %%a
Автор: monsoon
Дата сообщения: 16.06.2010 12:37
wolf0425

Цитата:
наличие на компе каталога OFFICE11 = следы установки оффиса-2003, и т.д.

Папка Office12 например м.б., если для Office2000 или 2003 устанавливался патч FileFormatConverters для открытия в этих версиях файлов Office2007
Автор: LightSpektr
Дата сообщения: 16.06.2010 13:29
Возился всё утро. В данный момент имею вот такое шаманство -

if exist "%allusersprofile%\Главное меню\Программы\Microsoft Office\Microsoft Office Word 2003.lnk". echo %username% 2003 >>"\\fs\Public\O\List.txt
if exist "%allusersprofile%\Главное меню\Программы\Microsoft Office\Microsoft Office Word 2007.lnk". echo %username% 2007 >>"\\fs\Public\O\List.txt"
if exist "%allusersprofile%\Главное меню\Программы\Microsoft Office\Microsoft Office Word 2010.lnk". echo %username% 2010 >>"\\fs\Public\O\List.txt"
if exist "%allusersprofile%\start menu\programs\Microsoft Office\Microsoft Office Word 2003.lnk". echo %username% 2003 >>"\\fs\Public\O\List.txt
if exist "%allusersprofile%\start menu\programs\Microsoft Office\Microsoft Office Word 2007.lnk". echo %username% 2007 >>"\\fs\Public\O\List.txt
if exist "%allusersprofile%\start menu\programs\Microsoft Office\Microsoft Office Word 2010.lnk". echo %username% 2010 >>"\\fs\Public\O\List.txt

коллеги тыкают пальцем и называют индусом)
на счёт кодировки - взял akelpad и сохранил батник с кодировкой dos 866 (oem)

скрипт в таком виде работает на XP. на других системах не проверял пока.

Следующая задача запустить единожды это чудо на каждом компе. Учитывая что не все в сети а когда будут все - неизвестно.

Через ГПО врят ли выдет - даже если дописывать батник в runonce при каждой перезагрузке оно будет прописываться заново.

Значит теперь нам нужно обрабатывать получившийся текстовый файл, и если там есть некое слово (в данном случае %username%) нам нужно завершать скрипт.

Пляшу дальше. Если есть советы - было бы не плохо.
Автор: HomeWell
Дата сообщения: 16.06.2010 14:25
LightSpektr
мда)))
а если переместят ярлыки например в подпапку "Чудо"?

надо такое на VBS писать
и определять версию ворда как например через создание объекта и доставания из объекта ее версию

да и не по пользователю надо проверять "обработал", а по имени компа

Добавлено:


Код:
Set w = CreateObject("Word.Application")
WScript.Echo "Version" & w.Version
If w.Documents.Count = 0 Then
w.Quit
End If
Автор: LightSpektr
Дата сообщения: 16.06.2010 14:52
Спасибо, не очень понял что делать с вашим кодом.


Цитата:
VBS я не умею.


Но чисто интуитивно есть вопрос - а если установленных офисов 2 и запустится самый поздний? Нужно оба.


Цитата:
а если переместят ярлыки например в подпапку "Чудо"?

пользователям такое низя да и пару проблемных компов отсмотреть вручную можно будет. Но не сотню.
Решение, пока нет времени полноценно заняться VBS, нужно либо в виде готового скрипта, либо с подробными комментариями, либо в виде консольной команды, в которой я смогу разобраться на данном этапе. Я осознаю и понимаю что VBS решит все мои проблемы но я им пока не владею. Сожалею что приходится занимать чьё-то время.


Текущая задача.

Прочитать текстовый файл вида

username 2007
username2 2003
итд

и выполнять тело скрипта только в том случае, если наша переменная %username% не равна ни одной записи в этом файле.
Автор: adjuster
Дата сообщения: 16.06.2010 15:20
LightSpektr
Пиши сразу в VBS, чтобы через GPO нормально осуществить.
Автор: HomeWell
Дата сообщения: 16.06.2010 15:43
и все же, почему Вы основывайтесь на имени пользователя (%username%), а не на имени компа (%COMPUTERNAME%)???
Ведь это офис ставиться не для одного пользователя, а на конкретный комп

про VBS я пропустил когда читал, сори

Добавлено:

Цитата:
а если установленных офисов 2 и запустится самый поздний?

два офиса? разве один другой не заменит? если не заменит, то все равно будет куча глюков
как например при запуске отличной от последнего запуска версии офиса, начнется донастраивание компонент.


Цитата:
Прочитать текстовый файл вида

перебором FOR

Код:
help FOR
Автор: vacili4
Дата сообщения: 17.06.2010 04:59

Цитата:
Учебный курс "Программирование для администраторов " [CHM] - всем начинающим рекомендуется
дурь... FreemanRU Вы сами то читали?
Автор: YNY
Дата сообщения: 17.06.2010 08:00
Ну ты блин даешь LightSpektr))))
VBS решит все мои проблемы но я им пока не владею открой 2003 Word (если установка была полной) то там есть в "Вид\Панели\VB" затем тыкаешь справку и читаешь, но тебе нужней WMI, а не VBS)
[more=вот пример из Scriptomatic2 поматри его]
Returns a list of software that was installed on a computer using Windows Installer. This information is then written to a text file.



Supported Platforms

Windows Server 2003
Yes

Windows XP
Yes

Windows 2000
Yes

Windows NT 4.0
Yes

Windows 98
Yes




Script Code

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("c:\scripts\software.tsv", True)

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product")

objTextFile.WriteLine "Caption" & vbtab & _
"Description" & vbtab & "Identifying Number" & vbtab & _
"Install Date" & vbtab & "Install Location" & vbtab & _
"Install State" & vbtab & "Name" & vbtab & _
"Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _
& "Version"

For Each objSoftware in colSoftware
objTextFile.WriteLine objSoftware.Caption & vbtab & _
objSoftware.Description & vbtab & _
objSoftware.IdentifyingNumber & vbtab & _
objSoftware.InstallDate2 & vbtab & _
objSoftware.InstallLocation & vbtab & _
objSoftware.InstallState & vbtab & _
objSoftware.Name & vbtab & _
objSoftware.PackageCache & vbtab & _
objSoftware.SKUNumber & vbtab & _
objSoftware.Vendor & vbtab & _
objSoftware.Version
Next
objTextFile.Close


[/more]

Автор: Dasky
Дата сообщения: 18.06.2010 12:29
перенес вопрос в Программирование "удобняшек" на VBScript
Автор: vlary
Дата сообщения: 18.06.2010 13:08
Dasky А при чем здесь данный раздел?
Задачи на bat-файлах
Программирование "удобняшек" на VBScript
Изучаем структуру форума, учимся пользоваться поиском.
Автор: jek1976
Дата сообщения: 02.07.2010 11:49
Прошу помощи в решении следующей проблемы.
В папке "Documents & Settings" нужно проверить каждый из имеющихся локальных профилей (кроме системных All Users, Default User и прочих) на предмет того, были ли он синхронизирован с перемещаемым профилем на сервере или еще нет.

Вопрос в том, по каким признакам, имеющимся, может быть, в папке профиля это можно проверить (без обращения к серверу)?
Автор: YNY
Дата сообщения: 02.07.2010 14:31
jek1976
вопрос не по адресу, тебе к администрированию, а не к сприптописанию с таким вопросом!

Автор: jek1976
Дата сообщения: 02.07.2010 21:38

Цитата:
вопрос не по адресу, тебе к администрированию

Искал, не нашел. Подскажите ссылочку...
Автор: YNY
Дата сообщения: 03.07.2010 06:15
jek1976.

Учи мат часть
Перемещаемый профиль пользователя -- копия локального профиля хранится на общем ресурсе сервера. Профиль загружается (с сервера) при каждом входе пользователя на компьютер локальной сети (в слусчае неудачи исп локальная копия). Все изменения в перемещаемом профиле синхронизируются с копией на сервере по завершении пользовательского сеанса.


Добавлено:
Помнится один товарисч хотел заиметь права на папки в перемещаемых профилях и блуждал тут в поиске своего решения, жаль что он не знал того, что написано тут!!!

Автор: jek1976
Дата сообщения: 04.07.2010 00:52

Цитата:
Все изменения в перемещаемом профиле синхронизируются с копией на сервере по завершении пользовательского сеанса.

НЕ только. Синхронизация происходит и в начале сеанса.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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