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

» Программирование "удобняшек" на VBScript (Часть 2)

Автор: rte7
Дата сообщения: 16.03.2012 21:56
добрый день в vbs слабо разбираюсь хотелось бы дополнить мелкой деталью вот этот скрипт

[[more=САМ vbs-скрипт..]
'' Get OU
'
strOU = "OU=Users,DC=domain,DC=com"

' Create connection to AD
'
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"

' Create command
'
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000

' Execute command to get all users in OU
'
objCommand.CommandText = _
"<LDAP://" & strOU & ">;" & _
"(&(objectclass=user)(objectcategory=person));" & _
"adspath,distinguishedname,sAMAccountName;subtree"
Set objRecordSet = objCommand.Execute

' Show info for each user in OU
'
Do Until objRecordSet.EOF

' Show required info for a user
'
WScript.Echo objRecordSet.Fields("adspath").Value
WScript.Echo objRecordSet.Fields("distinguishedname").Value
WScript.Echo objRecordSet.Fields("sAMAccountName").Value

' Move to the next user
'
objRecordSet.MoveNext

Loop

' Clean up
'вот ссылка - http://blogs.msdn.com/b/alejacma/archive/2008/04/23/how-to-get-a-list-of-all-users-in-an-ou-vbscript.aspx
objRecordSet.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
[/more]
Скрипт выбирает данные из АД о юзерах - т.е. должность учётка лдап путь и так далее - ну остальное можно потом дальше подобавлять.
Вообщем задача такова --- выводит результаты на экран, какие строки нужно добавить в этот сркипт что бы сохранило например весь отчёт в C:\8.txt

Заранее буду вам признателен в помощи....

[more=П.С :] Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\ScriptLog.txt")
просто создало C:\ScriptLog.txt и данных там нет , пусто.
как переделать это тспкирт что бы сразу отправлялись данные в C:\ScriptLog.txt [/more]
Автор: fire4x
Дата сообщения: 16.03.2012 23:48
Как остановить и отключить службу Windows без подтверждений?
Автор: shveicar
Дата сообщения: 25.03.2012 13:45
Здравствуйте,
Не безызвестная многим, программа adobe dreamweaver - может, весьма удобно, проверять сайт на наличие ссылок, результат можно увидеть в текстовом файле, вида

Код: Неработающие ссылки:

index_splash.htm ../silginc.com/index.htm
members/220_2.htm images/newmenu__hover_01.jpg
members/6145_221.htm images/newmenu__hover_01.jpg
members/6145_221.htm 6145_2f-6142-01-sm.jpg
members/6145_221.htm 6145_2f-6142-01-lg.jpg

Внешние ссылки:

2257.htm mailto:info@sexentertain.co
index_splash.htm http://www.google.com/


Потерянные файлы:

images/Descr.WD3
Автор: 13071963
Дата сообщения: 26.03.2012 20:39
Прошу Вас оказать помощь в решении следующей задачи!!! Сам VBScript не знаю.

==================== ОПИСАНИЕ =========================================

После сканирования документа имеется папка, в которой отсканированные файлы
записаны, как правило, в следующем формате:
000.tif
001.tif
002.tif
003.tif
...
112.tif и т.д.

Файл для обработки (очистки)загружается в Spotlight Pro по очереди, "по одному"!

Имеется командный файл в Spotlight, в котором прописаны необходимые действия, выполняемые автоматически, после ручной обработки.
Например:
- Автовыравнивание страницы
- Очистка мусора
- Залитие дырок
- Приведение к необходимому формату
- ...
- Сохранить как (в другой каталог)
- Закрыть файл

=================== ЗАДАЧА ===========================================

В конце командного файла необходимо выполнить команду АВТОМАТИЧЕСКОЙ загрузки "следующего" обрабатывамого файла из указанного первоначально каталога. Например:
загружен файл 001.tif >>Ручная обработка >> Командный файл >> загружен для обработки 002.tif и т.д. до конца.

Возможно ли описать данное действие имеющейся на VBScript (или JavaScript)? ПОМОГИТЕ!
Автор: timurgall
Дата сообщения: 29.03.2012 13:08
Доброго времени, есть вот такой скрипт

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists("C:\Program Files\xxx\test.txt") Then
Set objFile = objFSO.GetFile("C:\Program Files\xxx\test.txt")
objFile.delete
End If

Если запустить его локально то фаил удаляется. А через групповую политику у пользователя нет. Там где я нашел этот пример так и было написано что он для локального запуска) Только в какую сторону его доработать чтобы он был для запуска через групповые политики?
Автор: Black_Lung
Дата сообщения: 30.03.2012 11:44
fire4x
по реестру у меня лично работает, возможно что-то где-то у тебя не правильно. Обрати внимание что условие 2 выполняется если указанной ветки реестра не существует, можно в этом случае вводить еще условие на проверку существования ветки.
if not iRC=0 then ошибка.

Пример удаления папки есть в msdne, а службами можно манипулировать с помощью wmi Win32_Service.

rte7
проще всего перенаправить экран в файл, добавив в конец команды запуска скрипта "> C:\8.txt"

13071963
По данным из гугла этот софт дружит с vbs.

timurgall
Возможно у пользователя нет прав на удаление или на запуск скрипта, какая ошибка при выполнении через политики?

Автор: MatroskinK
Дата сообщения: 30.03.2012 20:47
Функция Hex() в Vbs умеет получать значения, не превышающие 2 c небольшим миллиарда. А как можно получить 16-ричное представление значительно больших чисел?
По условиям задачи строка. содержащая 16-ричное представление должна быть длинной 12 символов.
Ауу, гуру...
Автор: fire4x
Дата сообщения: 31.03.2012 22:39
Black_Lung

Цитата:
Пример удаления папки есть в msdne,

Можно ссылочу. Или пример удаления папки, например, %AppData%\12345

Цитата:
службами можно манипулировать с помощью wmi Win32_Service

А каким образом? Можете объяснить на примере любой службы?
Автор: jeykey
Дата сообщения: 02.04.2012 08:17
fire4x

Цитата:
А каким образом? Можете объяснить на примере любой службы?

На примере службы "Удаленный реестр": [more]
Option Explicit

Dim strComputer, strService
Dim objWMIService
Dim objItem, colItems

strComputer = "."
strService = "RemoteRegistry"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Service where name = '" & strService & "'")
For Each objItem in colItems
If objItem.Started Then
objItem.StopService
End If
If objItem.StartMode <> "disabled" Then
objItem.ChangeStartMode("disabled")
End If
Next
[/more]
Автор: Black_Lung
Дата сообщения: 02.04.2012 17:59
MatroskinK
vbs не дружит с двоичным умножением, но есть идея..
Автор: MatroskinK
Дата сообщения: 02.04.2012 20:00
проблема решена. Vbs поддерживает деление с преобразованием результата в подтип Currency. А потом уже анализирую, как строку, полученный результат...
Black_Lung, а какая была идея?
Автор: Black_Lung
Дата сообщения: 03.04.2012 10:27
MatroskinK
У меня было идея умножения по таблице двоичных 10, можно работать с довольно большими числами с 64 битными и больше
Сегодня доделал рисует^ красивую горочку из 0 и 1:
[more]
Код:
dim x(15,59)
for i=0 to 15
for j=0 to 59
x(i,j)=0
next
next

x(0,1)=1
x(0,3)=1

for i=1 to 15
for c=1 to 10
for j=1 to 59
if x(i-1,j)=1 then
x(i,j)=x(i,j) xor x(i-1,j)
    if x(i,j)=0 then
    k=j
    do while x(i,k)=0
    k=k+1
    x(i,k)=x(i,k) xor 1
    loop
    end if
else
x(i,j)=x(i,j) or 0
end if
next
next
s=""
For j=0 to 59
s=x(i,j)&s
next
wscript.echo s
next
Автор: smaharbA
Дата сообщения: 08.04.2012 14:34
[more] [more] Set WshShell = CreateObject("WScript.Shell")
MicroSoft="HKLM\SOFTWARE\Microsoft"
DigitalProductIdWindows=MicroSoft & "\Windows NT\CurrentVersion\DigitalProductId"
on error resume next
Set word=CreaTEoBJECT("Word.Application")
DigitalProductIdOffice=MicroSoft & "\Office\" & word.Version & "\Registration\" & word.ProductCode & "\DigitalProductId"
offset=66
if left(word.Version,2)="14" then offset=822
if err.number=0 then
    word.quit
    OfficeKey=GetKey(WshShell.RegRead(DigitalProductIdOffice),offset)
    s="Ключ Офиса == " & OfficeKey
else
    s="Офиса нема..."
end if
on error goto 0
offset=66

WindowsKey=GetKey(WshShell.RegRead(DigitalProductIdWindows),offset)
s=s & vbcrlf & "Ключ Виндуз == " & WindowsKey
createobject("scripting.filesystemobject").opentextfile("numb.txt",2,-1).writeline(s)
msgbox s
Function GetKey(byval p, offset)
    pc="BCDFGHJKMPQRTVWXY2346789"
    for i=0 to 28
        a=0
        for j=0 to 14
            a=p(offset-j)+a*256
            p(offset-j)=(a\24) and 255
            a=a Mod 24
        next
        ProductKey=mid(pc,a+1,1) & ProductKey
        if (((i+2) Mod 6)=0) and (i<28) then
            i=i+1
            ProductKey="-" & ProductKey
        End If
    next
    GetKey=ProductKey
End Function
[/more] [/more]
Автор: timurgall
Дата сообщения: 09.04.2012 18:16
Set ObjShell=CreateObject("WScript.Shell")
RegStr="HKLM\software\test"
ObjShell.RegWrite "RegStr&Birthday","1303","reg_SZ"

Ошибка в строке 3 символ 1.
Недопустимы вызов или аргумент процедуры.
Кто может подсказать в чем не так?
Автор: smaharbA
Дата сообщения: 09.04.2012 18:23
ObjShell.RegWrite RegStr,"1303","reg_SZ"
Автор: timurgall
Дата сообщения: 10.04.2012 07:51
Такая же ошибка.
Автор: smaharbA
Дата сообщения: 10.04.2012 08:32
HKLM\software\test - это раздел ? если да то

ObjShell.RegWrite RegStr & "\Birthday","1303","REG_SZ"
Автор: Capacitor
Дата сообщения: 10.04.2012 10:21
Уважаемые форумчане!
Большая просьба помочь создать скрипт по переименованию файлов с использованием в имени файла вчерашней даты. Поискав по форуму, сделал вывод, что оптимальным решением будет использование скрипта vbs. Нашел пост по использованию даты на день раньше текущей (http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=760#17), но так как я в VBS не разбираюсь абсолютно, хотел бы вас попросить помочь в создании скрипта, который должен ежесуточно переименовывать текстовый файл(файл в папке автоматически создается прикладной программой), имя которого состоит из текстовой части и даты в формате YYMMDD. Пример имени файла: Maket_120410.txt. Задача состоит в переименовании в имени файла текущей даты во вчерашнюю дату. Текстовая часть имени файла и его расширение не изменяется, но должна быть возможность коррекции этого имени и расширения в скрипте(при необходимости). Т.е. фактически, файлу, с нужным расширением нужно задать, новое имя полностью.
Если не трудно, подскажите, с какими параметрами нужно запускать скрипт для переименования файла?
Автор: timurgall
Дата сообщения: 10.04.2012 12:54

Цитата:
HKLM\software\test - это раздел ? если да то
ObjShell.RegWrite RegStr & "\Birthday","1303","REG_SZ"


smaharbA Спасибо. Я много раз и по разному пытался изменять аргументы но ни разу не менял "reg_SZ" на "REG_SZ" и именно из-за него была ошибка.

Добавлено:
Set ObjShell=CreateObject("WScript.Shell")

ОbjShell.RegWrite "HKLM\X\X\X\Windows\Layers\M:\\WORKDB\\CLIENT\\deal32.exe","DisableNXShowUI","REG_SZ"

В итоге она делает не ключ "M:\\WORKDB\\CLIENT\\deal32.exe" со значением DisableNXShowUI
А разделы вниз по дереву Layers\M:\WORKDB\CLIENT\ и уже ключ deal32.exe со значение DisableNXShowUI
Подмена на переменную ничего не дает.
Как ей так обьяснить чего я хочу, чтобы она поняла?
Автор: jeykey
Дата сообщения: 10.04.2012 19:33
timurgall
Можно через WMI сделать [more]
const HKEY_LOCAL_MACHINE = &H80000002
Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
objResult = objReg.SetStringValue(HKEY_LOCAL_MACHINE, "X\X\X\Windows\Layers", "M:\\WORKDB\\CLIENT\\deal32.exe", "DisableNXShowUI")
[/more]
Автор: smaharbA
Дата сообщения: 11.04.2012 05:30
ОbjShell.RegWrite "HKLM\X\X\X\Windows\Layers\M:/WORKDB/CLIENT/deal32.exe","DisableNXShowUI","REG_SZ"

либо вми
Автор: Black_Lung
Дата сообщения: 11.04.2012 13:51
Capacitor
[more]
Если дата не в конце перед расширением то будет не правильно работать
Если с параметром любым то имя файла меняется

Код:
folder="C:\test\"
new_ext="Новое расширение"
new_name="Новое имя"
Set fso = CreateObject("Scripting.FileSystemObject")
ddd=Date-1
if mid(ddd,len(ddd)-4,1)="/" then
if mid(ddd,2,1)="/" then
ddd1=right(ddd,2)+"0"+left(ddd,1)
else
ddd1=right(ddd,2)+left(ddd,2)
end if
if mid(ddd,len(ddd)-6,1)="/" then
ddd1=ddd1+"0"+mid(ddd,len(ddd)-5,1)
else
ddd1=ddd1+mid(ddd,len(ddd)-6,2)
end if
else
ddd1=right(ddd,2)+mid(ddd,4,2)+left(ddd,2)
end if

i=0
Set f = fso.GetFolder(folder)
Set fc = f.Files
For each fl in fc
fext=fso.GetExtensionName(fl.Name)
if not fext="" then
fname=left(fl.name,len(fl.name)-len(fext)-7)+ddd1+"."+fext
else
fname=left(fl.name,len(fl.name)-6)+ddd1
end if

If Wscript.Arguments.Count > 0 Then
fname=new_name+cstr(i)+ddd1+"."+new_ext
i=i+1
end if
fl.move(folder+fname)
Next
Автор: Capacitor
Дата сообщения: 12.04.2012 13:27
Black_Lung

Спасибо огромное! Очень выручили!

Не знаю как, но все работает четко, и даже лучше, чем я думал!!!

Еще раз спасибо!
Автор: tgkonvent
Дата сообщения: 12.04.2012 13:47
Всем доброго времени суток!
Помогите написать скрипт по деинсталяции AutoCAD любой версии.
Если взять строку, которую он прописывает в реестре Uninstall, то там запускается оболочка в котороый пользователь должен сам выбрать что он хочет делать - обновить, исправить или деинсталлировать Автокад
А, мне необходим скрипт в котором будет производиться безусловное удаление автокада с машины, без всяких запросов.
Автор: megamozg13
Дата сообщения: 12.04.2012 14:20
tgkonvent
Уважаемый, может вам поискать портативные сборки, не требующие инсталяции и не оставляющие следов на машине?
Автор: tgkonvent
Дата сообщения: 12.04.2012 14:31

Цитата:
Уважаемый, может вам поискать портативные сборки, не требующие инсталяции и не оставляющие следов на машине?

Поишу и такие сборки! А, через скрипт есть возможность удаления такой программы?
Автор: kazavo4ka
Дата сообщения: 12.04.2012 14:44
tgkonvent
http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=16077500&linkID=9240617

при необходимости модифицируй под свои задачи
Автор: timurgall
Дата сообщения: 13.04.2012 07:49
jeykey, smaharbA Спасибо, получилось.
Автор: nicka
Дата сообщения: 17.04.2012 14:59
есть такие команды

adb install .\apk\notepad.apk
adb install .\apk\teamviewer.apk
adb install .\apk\angrybirds.apk

...

надо сделать vbs с выбором файла - и выбрать когда надо notepad.apk, потом teamviewer.apk и т.д.

можно реализовать?
Автор: chel78
Дата сообщения: 18.04.2012 13:17
Доброго времени суток.
может и не в тему пишу, но не знаю куда правильнее.
есть скрипт, который пишется в Excele с помощью SAP.
то есть в екселе стоит аддон, который подключается к SAP и пишет в Excel код скрипта, который потом можно многоразово запускать на выполнение с переменной. вопрос вот в чем. необходимо как то вставить паузу, в определенный момент выполнения скрипта. просто подождать при записи - результата не дает.
пример скрипта.
[img] Uploaded with ImageShack.us[/img]

Код:
IsInput    ID    ScriptCode
START    001    
    002    MySession.findById("wnd[0]").resizeWorkingPane 65,28,false
x    003    MySession.findById("wnd[0]/usr/ctxtLIKP-VBELN").text = "74641979"
    004    MySession.findById("wnd[0]/usr/ctxtLIKP-VBELN").caretPosition = 8
    005    MySession.findById("wnd[0]").sendVKey 0
    006    MySession.findById("wnd[0]/mbar/menu[3]/menu[1]/menu[0]").select
    007    MySession.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1,3]").text = "zua4"
    008    MySession.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1,3]").setFocus
    009    MySession.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1,3]").caretPosition = 4
    010    MySession.findById("wnd[0]").sendVKey 0
    011    MySession.findById("wnd[0]/tbar[0]/btn[11]").press
    012    MySession.findById("wnd[0]/usr/chkNAST-DIMME").selected = true
    013    MySession.findById("wnd[0]/usr/ctxtNAST-LDEST").text = "locl"
    014    MySession.findById("wnd[0]/usr/txtNAST-ANZAL").text = "1"
    015    MySession.findById("wnd[0]/usr/chkNAST-DIMME").setFocus
    016    MySession.findById("wnd[0]").sendVKey 3
    017    MySession.findById("wnd[0]/tbar[0]/btn[11]").press
STOP    018    

Страницы: 12345678910111213141516171819202122232425

Предыдущая тема: Помогите новичку в C++


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