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

» Автоматизация администрирования. Скрипты на KIX

Автор: vasiliy74
Дата сообщения: 18.04.2006 14:41

Цитата:
Логон скрипты применяются для нескольких основных целей
1. Настройка окружения залогиневшегося пользователя. Сюда относится подключение дисков и принтеров, прописывание каких-то путей (напр. персональной папки или каталогов шаблонов MS Office) и т.д....


Вот собрался принтеры прописать, привязка по комнатам, как лучше организовать? Проискал, готовых решений нет и проблему то никто не освещал, у меня всё ограничилось тем, что я не смог придумать проверку на установленный принтер(чтоб дважды не устанавливал), ну это не сложно из реестра, а вот как проверить принадлежность той или иной группе в комнате?? Не знаю.
Автор: AlexSSS
Дата сообщения: 18.04.2006 14:53
vasiliy74
самый простой вариант - для каждого принтера сделать свою группу. И в эти группы внести всех пользователей, которые имеют к нему доступ.

пример кода
;/RKT/ Экономисты
;$Printer = "Printer15"
;$Result    = AddPrinterOnServer()

;/THN/ Технологи
;$Printer = "Printer5"
;$Result    = AddPrinterOnServer()

function AddPrinterOnServer()
    if InGroup($Printer)
        ? "...Adding printer $Printer"
        $res    = AddPrinterConnection ("\\Server\$Printer")
    EndIf
EndFunction

можно привязать принтеры к имеющимся группам
if $FirmGroup='LE'
    ? "...Adding printer Konica Minolta DI1611"
    $res    = AddPrinterConnection ("\\reg-04-4047-4\prnsrv6")
    ? "...Adding printer Samsung SCX 4216F"
    $res    = AddPrinterConnection ("\\reg-04-4047-4\SamsungPrinter")
EndIf

вариантов куча. Но надо понять простую штуку - чтобы скрипт узнал какие-то данные, надо чтобы эти данные где-то были прописаны. Напр, ты вполне можешь сделать в AD группы для каждой комнаты.
Автор: Smitis
Дата сообщения: 18.04.2006 15:00
AlexSSS

Цитата:
Можно ли запустить KIX скрипт без вывода досовского окна?

WKIX32.EXE
Автор: AlexSSS
Дата сообщения: 18.04.2006 15:57
Smitis
WKIX32.EXE /i
спасибо, это я чего-то тормознул
Автор: AlexSSS
Дата сообщения: 19.04.2006 12:28
проблема @PrimaryGroup
периодически на разных компах @PrimaryGroup возвращается пустое значение.

это бывает на разных операционках, Windows 95/95/XP
это происходит при регистрации через разные DC (@LServer)
на всех DC запущен kixrpc

куда можно покопать?
Автор: HPCompaq
Дата сообщения: 14.07.2006 16:57
7fortune

Цитата:
Cорри за долгое отстутствие =( Ситуация такая: пользователей около 60, их личные папки расположены в корне диска d файл сервера, папка будет называться по учетной
записи в домене (по фамилии)


USE * "\\server_name\@UserID"+"$"

знак "$" надо добавлять если шара скрытая
Автор: Smitis
Дата сообщения: 15.08.2006 10:30
Кстати, на оффсайте релиз прошлого месяца 4.52 и новая бета 4.53 beta 2
Автор: Smitis
Дата сообщения: 20.09.2006 12:59
15.09.2006
Версия 4.53
_http://www.kixtart.org/binary/distrib/KiX2010_453.zip

Автор: DIALOGIT
Дата сообщения: 22.09.2006 13:39
Какую функцию и с каким параметром надо использовать в KIX скрипте при выводе строки в файл, чтобы каретка не перемещалась на след. строку?
Заранее спасибо!
Автор: AlexSSS
Дата сообщения: 22.09.2006 14:46

Код:
$res = Open(1,'_test.log',1)
$res = Close(1)
$res = Open(1,'_test.log',4)
$res = WriteLine(1, '111')
$res = WriteLine(1, '222')
$res = Close(1)
EXIT
Автор: DIALOGIT
Дата сообщения: 22.09.2006 16:02
огромное спасибо ЖУТКО СТУПИЛ !
Автор: kazavo4ka
Дата сообщения: 28.09.2006 09:13
Извиняюсь если не совсем в тему, но не нашел отдельных топков по этому вопросу. А вопрос вот такой - существует ли какая-нибудь литература по kixtart'у на русском языке? Если нет, то где можно взять на английском? И вообще с чего лучше начать новичку в этом деле?
Автор: Smitis
Дата сообщения: 09.10.2006 21:09
kazavo4ka

Цитата:
А вопрос вот такой - существует ли какая-нибудь литература по kixtart'у на русском языке?

Нет, похоже. Хотя отдельные упоминания встречаются.

Цитата:
Если нет, то где можно взять на английском?

http://web1.scriptlogic.com/Kixtart/htmlhelp/default.asp
http://www.kixscripts.com/main.asp
http://www.scriptlogic.com/Kixtart/
Автор: AlexStud
Дата сообщения: 25.01.2007 16:14
Имеется скрипт по подключению баз данных 1С, по мотивам статьи И. Коробко в журнале "Системный администратор" за март 2005

При деббаге ругается следующи образом:

ERROR : error in USE statement!
Script: X:\Script.KIX
Line : 29

Помогите, плиз!

Script.kix

RUN "\\fileserver\Deport$\Checkcfg.exe" "+@USERID+"
If @ERROR = 0
? "Checking computer configuration..."
Endif
;###############################################################################
;              Модуль подключения баз 1С
;###############################################################################
;============================================
;    Начало подключения сетевого диска
;============================================
$FName="config.ini"
$Section="1C"
$1C_Letter_VaL = ReadProfileString($FName, $Section, "1C_Letter") ;чтение параметра 1C_Letter
$1C_Path_Val = ReadProfileString($FName, $Section, "1C_Path") ; чтение параметра 1C_Path
Use $1C_Letter_Val + ":" /delete /persistent ; отключение сетевого диска
Use $1C_Letter_Val + ":" $1c_Path_Val ; подключение сетевого диска
;============================================
;    Конец подключения сетевого диска
;============================================
;
;============================================
;    Начало фрагмента формирующего массив
;    элементы которого включают в себя путь и
;        название базы
;============================================
$meta = ReadProfileString($FName, $Section, "1C_Symbol")
$1C_Letter_VaL = ReadProfileString($FName, $Section, "1C_Letter")

Set rootDSE_ = GetObject("LDAP://RootDSE")
d_def=rootDSE_.Get("defaultNamingContext")
long_Ldap_name = "LDAP://" + d_def
$p=0
$q=0
Dim $1C_Must[]

DO
$group=EnumGoup($p)
If Instr($group, $meta)<>0
$1C_Group=Right($group,Len(group)-InstrRev($group,"\")-Len($meta))

;вид переменной R:\Folder_with_Base
$1C_Base=$1C_Letter_VaL+":\"+$1C_Group
$strADSQuery = "SELECT description FROM 'LDAP://" + $long_Ldap_name + "' WHERE Name = "' + $1C_Group + "' and objectClass='group'"
$objADOConn = createObject("ADODB.Connection")
$objADOConn.Provider = "ADsDSOObject"
$objADoConn.Open ("Active Directory Provider")
$objADOCommand = CreateObject("ADODB.Command")
$objADOCommand.ActiveConnection = $objADOConn
$objADOCommand.CommandText = $strADSQuery
$objQueryResultSet = $objADOCommand.Execute
$1C_Group_Descr =$objQueryResultSet.Fields("description")

; переопределение размера динамического массива
Redim Preserve $1C_Must[$q]
$1C_Must[$q]= UCase($1C_Base)+$meta+$1C_Group_Descr
$q=$q+1
End if
$p=$p+1
UNTIL Len($group)=0
;============================================
;    Конец фрагмента формирующего массив
;    элементы которого включают в себя путь и
;        название базы
;============================================
;
;============================================
;    Формирование списка подключенных баз
;============================================
$1C_Registry_Val = ReadProfileString($FName, $Section, "1C_Registry")
dim $1c_connected[]
$m=0
$n=0

DO
$1c_Title=EnumValue($1C_Registry_Val, $m)
$1c_Name=ReadValue($1C_Registry_Val, $1c_Title)
if Lcase(Left($1c_Title,1))=Lcase($1C_Letter_VaL)
ReDim Preserve $1C_Connected[$n]
$1C_Connected[$n]=Ucase($1c_Title)+$meta +$1c_Name
$n=$n+1
endif
$m = $m + 1

UNTIL Len($1c_Title) =0
;============================================
;    Формирование списка подключенных баз
;============================================
;
;============================================
;    Начало сопоставления сформированных
;        списков баз
;============================================
; удаление лишних баз
for $dfg=0 to ubound($1c_Сonnected)
$flag_p=0
$flag_p=AScan($1c_Must, $1c_Connected[$dfg])
if $flag_p=-1
$group=$1c_Connected[$dfg]
DelValue ($1c_path, ї
Left($Group,Instrrev($Group,$meta)-1))
endif
next

; подключение недостающих баз
for $dfg=0 to ubound($1c_must)
$flag_p=0
$flag_p=Ascan($1c_connected,$1c_must[$dfg])
if $flag_p=-1
$group=$1c_must[$dfg]
WriteValue ($1c_Path, Left($group, ї
Instrrev($group,$meta)-1), Right($group,Len($group)-Instrrev($group, $meta) - Len($meta)+1),"REG_SZ")
endif
next
;============================================
;    Конец сопоставления сформированных
;        списков баз
;============================================

Config.ini

[1C]
1C_Letter=R
1C_Path=\\Fileserver\1CBases$
1C_Prefix=”1C-”
1C_Symbol=”#”
1C_Registry=Software\1c\1cv7\7.7\Titles ;по умолчанию ветвь HKCU

Автор: Smitis
Дата сообщения: 16.02.2007 10:21
11 февраля обновился kixforms
KiXforms Classic v2.46
KiXforms.NET v3.01
Автор: Smitis
Дата сообщения: 07.03.2007 20:19
Вот наткнулся на интересную утилитку. Делает exe-шники из скриптов kixtart-а
Автор: Smitis
Дата сообщения: 08.04.2007 14:14
Объединение скриптов CMD и KIXTART в одном файле. Версия 2.

Несколько слов, зачем это нужно и что это нам даёт:
- Одно из свойств kixtart-а - он не требует инсталяции и настройки. Для работы консольных скриптов достаточно одного исполняемого файла kix32.exe, помещённого по одному из пути из переменной PATH. Но нет инсталяции - нет интеграции с системой - нет ассоциации со скриптами kixtart-а. Ассоциация же с CMD и BAT файлами есть по умолчанию.
- Некоторые действия удобней делать через командный процессор, некоторые через kixtart. Эти действия cmd/kix можно чередовать. Два скриптовых языка дополняют друг друга, оставаясь при этом в пределах одного файла.
- Способ передачи параметров в скрипты kixtart не совсем удобен. Проще передавать параметры командному файлу, а затем из него в kixtart (способы передачи параметров будут рассмотрены далее).
- Вместо консольного kix32 можно использовать гуевый wkix32, в том числе и через команду START.

[more]
Kixtart выполняет скрипты с предкомпиляцией - перед выполнением скрипт компилируется в памяти в промежуточный код. Естественно, проверяется правильность синтаксиса языка. Так как cmd и kix достаточно разные языки, способ интеграции kix в cmd основан на том, что часть скрипта для командного процессора оформляется как коментарий языка kixtart. Командный процессор же выполняет свои скрипты последовательно считывая строки. Нахождение в его скрипте "левой" информации не критично, главное, чтобы эта "левизна" случайно не выполнилась.

Для вызова интерпретаторв kixtart из скипта используется следующая конструкция:

Код:
kix32 "%~f0"
Автор: der
Дата сообщения: 05.07.2007 09:04
AlexSSS
А можешь выложить логон скрипт, который собирает инфу об автозагрузке (ты его упоминал в ветке про вирусы).
Спасиб.
Автор: Arto77
Дата сообщения: 12.07.2007 10:13
Добрый день.

Я когда-то сталкивался с такой проблемой, и как-то её решил, причём решение было довольно тривиальное и простое.

В загрузочном скрипте определяется принадлежность пользователя той или иной групе и в соответствии с этим добавляются принтеры и мапятся диски, но как мне правильно достучатся к групам домена, забыл.., склероз болезнь жуткая..
Автор: AlexSSS
Дата сообщения: 12.07.2007 11:08
Arto77
InGroup()

Добавлено:
der, жутко извиняюсь. я сюда давно не заглядывал.
вопрос о скриптах еще актуален?
Автор: Arto77
Дата сообщения: 12.07.2007 16:31
ещё актуален, я знаю, что InGroup(), но как правильно обратится к групе безопасности домена...
Автор: kazavo4ka
Дата сообщения: 12.07.2007 16:44
Arto77
потерто, не то написал

вот тут посмотри, в качестве примера
Автор: Arto77
Дата сообщения: 12.07.2007 17:51
всё это конечно интересно, но больше интересует строка..
If Ingroup ("[путь к группе домена]")

Так вот, как этот путь должен выглядеть...
Автор: AlexSSS
Дата сообщения: 14.07.2007 15:54
какой путь???
просто имя группы

Код:
IF INGROUP("Project9350") or INGROUP("Project_CF3850") or INGROUP("L203")
    Use J: "\\Files\le_projects"
ENDIF

IF INGROUP("TeleBank")
    USE O: "\\Files\telebank"
ENDIF

Автор: der
Дата сообщения: 17.07.2007 07:28
AlexSSS
да-да-да! )) Вопрос о скриптах на тему ведения логов по автозагрузке на клиентах еще актуален
Автор: AlexSSS
Дата сообщения: 17.07.2007 10:14
der
идея должна быть понятна, сам скрипт может сразу не заработать - у меня это несколько скриптов, здесь я слил в один то, что вроде достаточно по твоему вопросу

реально скрипт можно еще сократить в несколько раз, у меня он делает еще какие-то вещи, сейчас просто нет времени упрощать его самому



Код:
; ***********************************************************************
; Defined global variables for all scripts
; ***********************************************************************

GLOBAL $CR, $PathLog, $PathAddFirm, $TAB, $TAB2, $Level, $TAB3, $TAB4, $PrimaryGroup
GLOBAL $LogHeader
GLOBAL $LogServer

$LogServer    = "Files"
$PathLog    = "\\$LogServer\Logs\"

$PathAddFirm    = ""
$CR        = Chr(13) + Chr(10)
$TAB        = Chr(9)
$TAB2        = $TAB+$TAB    
$TAB3        = $TAB+$TAB+$TAB
$TAB4        = $TAB+$TAB+$TAB+$TAB

$PrimaryGroup    = UCase($FirmGroup)
$PathAddFirm    = $PrimaryGroup+"\"




$LogDir        = $PathLog+"run\"
IF EXIST($LogDir)=0    MD $LogDir    ENDIF

$LogSoft    = $PathLog+"run\"
$LogSoft    = $LogSoft+@WKSTA+'.log'
IF EXIST($LogSoft)=1    DEL $LogSoft    ENDIF
IF EXIST($LogSoft)=1    EXIT        ENDIF

$LogHeader    = substr(@UserID+' ',1,10)+$TAB+SubStr(@WKSTA+' ',1,15)+$TAB+@DATE+" "+@TIME+$Tab+SubStr(@FullName+' ',1,22)+$TAB+@ProductType
$LogHeader2    = @DATE+" "+@TIME+$Tab+@WKSTA+$TAB+@UserID+$TAB+@FullName+$TAB+@ProductType+$TAB


$Alert        = 0

$LogErr        = 0
$LogErr        = File_Open(3,$logSoft)
$LogErr        = WriteLine(3,$LogHeader+$CR+$CR)
$LogErr        = File_Open(4,$LogDir+"_illegal.log")
$LogErr        = File_Open(5,$LogDir+"_warning.log")

$Run    = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\"
$Result    = ver_registry_tree()

$Run    = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\"
$Result    = ver_registry_tree()

$Run    = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\"
$Result    = ver_registry_tree()


; Installed Soft
$LogErr        = WriteLine(3, '---------------------'+$CR)
$LogErr        = WriteLine(3, 'Installed Soft'+$CR)
$LogErr        = WriteLine(3, '---------------------'+$CR)
$Index         = 0
$Uninstal    = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\"

$KeyName     = ENUMKEY($Uninstal, $Index)
WHILE $KeyName<>""
    $KeyName = ENUMKEY($Uninstal, $Index)
    IF EXISTKEY($Uninstal+$KeyName+'\DisplayName')
        $SoftName    = ReadValue($Uninstal+$KeyName,'DisplayName')
        IF $SoftName<>""
            SELECT
            CASE INSTR($SoftName, "Windows XP Hotfix")
            CASE INSTR($SoftName, "Windows 2000 Hotfix")
            CASE INSTR($SoftName, "Пакет исправлений для Windows XP")
        CASE 0=0
                $LogErr        = WriteLine(3, $SoftName+$CR)
            ENDSELECT
        ENDIF
    ENDIF
    $Index = $Index + 1
LOOP

$LogErr    = close(3)
$LogErr    = Close(4)
$LogErr    = Close(5)


If @INWIN=2 and $Alert>0
    Dim $lm_run, $lm_run_text
    $lm_run        = 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce'
    $lm_run_text    = '\\files\netlogon\k_run.bat'
    $ERR         = WriteValue ($lm_run, "Remove viruses and spyware", $lm_run_text, REG_SZ)
ENDIF

EXIT

function ver_registry_tree
    $Index         = 0
    $LogErr        = WriteLine(3, $Run+$CR)
    $KeyName    = "1"
    WHILE $KeyName<>""
        $KeyName = ENUMvalue($Run, $Index)
        $SoftName= ReadValue($Run,$KeyName)
        $SumKey    = $KeyName+$TAB+$TAB+$SoftName
        $LogErr    = WriteLine(3, $SumKey+$CR)

        $LogErr    = WriteLine(7, $LogHeader2+$Run+$Tab+$KeyName+$Tab+$SoftName+$CR)
        $LogErr    = WriteLine(8, $LogHeader2+$Run+$Tab+$KeyName+$Tab+$SoftName+$CR)

        $SumKeyL= lcase($SumKey)
        $LogErr    = ver_key()
        $Index = $Index + 1
    LOOP
EndFunction



function ver_key()


    SELECT
    CASE INSTR($SumKeyL, "hidn.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "5-1-63-4.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "hldrrr.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "anti_troj")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "wintems.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "_exe.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "wiwshost")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "firewall_anti")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "mscnf.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "sysbho.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "syshost")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "audcntr.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "mousecntl.exe")
        $LogErr    = del_key_and_file()
    CASE INSTR($SumKeyL, "template script")
        $LogErr    = del_key()
    CASE INSTR($SumKeyL, "norten.pif")
        $LogErr    = del_key()
    ENDSELECT    
EndFunction

function del_key()
    $err=DelValue($run,$KeyName)
    $LogErr    = WriteLine(4, $LogHeader+chr(9)+$SumKey+$CR)
EndFunction

function del_key_and_file()
    IF exist($SoftName)
        SHELL "attrib $SoftName -s -h -r"
        DEL $SoftName    
    ENDIF

    $err    = DelValue($run,$KeyName)
    $LogErr    = WriteLine(5, $LogHeader+chr(9)+$SumKey+$CR)
    $Alert    = $Alert+1
EndFunction

Function File_open($handle, $file)
    $res = Open($handle,$file,1)
    $res = Close($handle)
    $res = Open($handle,$file,4)
EndFunction

Автор: der
Дата сообщения: 17.07.2007 14:17
AlexSSS
Спасиб!
а можно еще \\files\netlogon\k_run.bat прикрепить?
Автор: AlexSSS
Дата сообщения: 17.07.2007 15:34
перепроверил - его у меня сейчас нет
похоже я его и не использовал, просто планировал на будущее запуск отдельного скрипта для удаления конкретной заразы

если у тебя много win98-х, могу привести код, который я использовал для того, чтобы чистить их при запуске. Идея простая - в autoexec.bat в конец прописывается запуск дополнительного батника, который просто удаляет конкретные файлы или каталоги. Этот дополнительный батник при входе в виндовс при необходимости обновляется с сервера

пример

Код:
@ECHO OFF

IF EXIST C:\WINDOWS\SYSTEM\antiav_exe.exe    DEL C:\WINDOWS\SYSTEM\antiav_exe.exe
IF EXIST C:\WINDOWS\SYSTEM\antiav_exe.dll    DEL C:\WINDOWS\SYSTEM\antiav_exe.dll
IF EXIST C:\WINDOWS\SYSTEM\hloader_exe.exe    DEL C:\WINDOWS\SYSTEM\hloader_exe.exe

IF EXIST C:\WINDOWS\SYSTEM\anti_troj.exe    DEL C:\WINDOWS\SYSTEM\anti_troj.exe

IF EXIST C:\WINDOWS\SYSTEM32\antiav_exe.exe    DEL C:\WINDOWS\SYSTEM32\antiav_exe.exe
IF EXIST C:\WINDOWS\SYSTEM32\antiav_exe.dll    DEL C:\WINDOWS\SYSTEM32\antiav_exe.dll
IF EXIST C:\WINDOWS\SYSTEM32\hloader_exe.exe    DEL C:\WINDOWS\SYSTEM32\hloader_exe.exe

IF EXIST C:\progra~1\Webdia~1\5-1-63-4.exe    DEL C:\progra~1\Webdia~1\5-1-63-4.exe
Автор: vadimo
Дата сообщения: 30.08.2007 11:57
а скажите, господа, как из киксового скрипта вызывать другой внешний скрипт не киксовый? я не пробовал, но судя по документации, call вызывает другой киксовый скрипт, а если скрипт на vbs или еще какой-нить?
Автор: AlexSSS
Дата сообщения: 31.08.2007 08:11

Цитата:
как из киксового скрипта вызывать другой внешний скрипт не киксовый?


$Program    = "v_hardware.vbs"
$CMD="wscript $Program"
SHELL $CMD


Добавлено:
вообще, через SHELL можно запустить любую внешнюю программу. Проблем передать ей параметры тоже нет

Страницы: 12345

Предыдущая тема: включение DHCP на клиентах через GPO


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