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

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

Автор: Smitis
Дата сообщения: 31.08.2007 11:38
Кроме SHELL есть ещё команда RUN, запускающая внешнюю программу ассинхронно, т.е. скрипт продолжает работу не дожидаясь завершения той программы.
Автор: MaTpockuHKoT
Дата сообщения: 26.09.2007 22:04
А реально с помощью KiXtart назначить права папке?
Идея какая: логинится юзер в домене - проверяется есть ли у него личная папка на сервере. Если нет - то создаётся с правом доступа только ему великолепному...
Такое можно?
Кстати, у меня почему-то @USERID возвращает 0 (ноль)
Автор: vadimo
Дата сообщения: 26.09.2007 22:13
AlexSSS
Smitis
Спасибо, огромное, коллеги!!!

Добавлено:
MaTpockuHKoT
назначить права к папке можно с помощью команды cacls, но она будет внешняя для кикса. и потребует соответствующих прав для создания самой папки. logon-script запускается с правами логинящегося юзверя, так что прав на создание папки у него быть не должно. лучше, все же, хоум-драйвы создавать отдельной порцедурой при чек-ине пользователя.
Автор: AlexSSS
Дата сообщения: 27.09.2007 08:23

Цитата:
А реально с помощью KiXtart назначить права папке?
Идея какая: логинится юзер в домене - проверяется есть ли у него личная папка на сервере. Если нет - то создаётся с правом доступа только ему великолепному...
Такое можно?

если у самого пользователя есть права на создание папки и изменение прав, то можно. И проще всего это сделать с помощью утилиты cacls

Опишу, как это делается у нас. На сервере есть папка Personal, на которую у пользователей стоят права на просмотр, разрешение на создание папок и полный доступ к создателю. А скрипт просто проверяет, есть ли личная папка у пользователя. если нет, создает ее. При этом автоматически получая права на нее. Личная папка у нас по названию совпадает с @UserID

недостаток - теоретически пользователь может сам вручную понаделать для себя папок в каталоге личных папок. Но реально этого у нас ни разу не было. Да и отследить это просто

Автор: MaTpockuHKoT
Дата сообщения: 27.09.2007 14:19
vadimo
AlexSSS

Ребята, спасибо за ответы.
Что такое за утилита cacls?


Кстати, я уже кое-что сделал. Кучу ифов понаставил, чтобы при отсутствии связи скрипт не тупил. Зацените, мб что-то надо подправить... Глянь плиз мудрым взглядом.

; Подключение домашнего диска пользователя
CLS
Dim $nam_user,$home_fold,$u_fold,$pub_fold,$pub_ook
$nam_user=@FullName
$home_fold="\\BIRD\Home\"
$pub_fold="\\BIRD\Public"
$pub_ook="\\BIRD\For_OOK"

$u_fold=$home_fold+$nam_user

IF EXIST($u_fold)=0 ;Проверяем доступность домашней папки пользователя
    IF EXIST($home_fold)=0 ;Проверяем доступность каталога домашних папок
        "Домашний каталог "+$home_fold+" недоступен!"
    ELSE ;если каталог доступен, то создаём папку и монтируем диск
        MD $u_fold
        USE M: /DELETE
        USE M: $u_fold
    ENDIF
ELSE ; если доступна папка, монтируем диск
    USE M: /DELETE
    USE M: $u_fold
ENDIF

; Подключение диска Public
IF EXIST($pub_fold)=1 ;Проверяем доступность
    USE P: /DELETE        
    USE P: $pub_fold
ENDIF

; Подключение для ООК
IF INGROUP("ook") and EXIST($pub_ook)=1 ;Проверяем доступность и принадлежность к группе ООК
    USE O: /DELETE
    USE O: $pub_ook
ENDIF
Автор: AlexSSS
Дата сообщения: 27.09.2007 16:32
MaTpockuHKoT
> Что такое за утилита cacls?
входит в состав XP
Start-->Run-->cmd-->cacls
Автор: MaTpockuHKoT
Дата сообщения: 03.10.2007 13:07
2AlexSSS - спасибо.


Заметил "интересную" вещь с русскими буквами в строковых переменных. Например:
CLS
Dim $a
$a="Ё"
$a
Выдаёт на экран набор символов (смайлик и бубну). А вот если сделать вот так:
CLS
Dim $a
$a="Ё "
$a
или в строке присутствует любой символ, отличный от нашего алфавита (причём неважно в каком месте) - тогда всё нормально.
Версия KiXtart 4.60 Beta 2a
Кто-нибудь наблюдал подобное? И как это лечить?
Автор: Smitis
Дата сообщения: 03.10.2007 19:38
MaTpockuHKoT

Цитата:
Выдаёт на экран набор символов (смайлик и бубну). А вот если сделать вот так

Глюк.
В версии 4.53 всё нормально.
Автор: MaTpockuHKoT
Дата сообщения: 05.10.2007 10:22
Начинаю тихо звереть....
Мало того, что ни с того ни с сего ситуация с русскими буквами резко ухудшилась (они теперь всегда так отображаются), так ещё и скрипт при логоне стартует когда ему вздумается.
Первоначально во вкладке "Профиль" учётки юзера АД прописал kix32. В папке \NETLOGON рядом с kix32.exe лежал и файлик kixtart.kix в котором скрипт. Всё нормально запускалось.
А тут - бац и нифига. При логоне моргает стартанувший kix и всё. Скрипт не идёт.
Прописал в профиле kix32.exe kixtart.kix - заработало, но не у всех

Скоро поедет крыша...
Автор: Smitis
Дата сообщения: 05.10.2007 22:15
MaTpockuHKoT
Может стОит юзать последний проверенный релиз, а не бету?
Автор: MaTpockuHKoT
Дата сообщения: 09.10.2007 09:28
Да я разобрался.
Дело оказалось в самой АД, которая из двух сереверов, и тут рюхнулась реплика. А логон шёл то с одного, то с другого...
Ща заработало...
Автор: UdAvSt
Дата сообщения: 21.11.2007 12:19
Задача поставила меня в тупик, нужно при логоне пользователя @userid прописывать в сведения о пользователе в Office. Дело в том, что у меня на машинах есть Office2k и Office 3k, ну я думал хранятся себе данные в ветке какой-нить об имени пользователя, но всё не так просто http://support.microsoft.com/kb/290528/ru
В принципе можно сразу на все офисы писать в реестр, менять "UserName"=hex:41,00,6c,00,65,00,78,00,38,00,00,00 но ведь имя надо как-то в такую строку преобразовать в в REG_BINARY ...

PS Нужно для того, чтобы оффис в создаваемых документах проставлял реальное имя пользователя.

...Всё, сваял...
$LE=LEN(@USERID)
:LOOPLE
$LE=($LE-1)
$x=DECTOHEX (Asc(SUBSTR(@USERID, LEN(@USERID)-$LE, 1)))
$ren=$ren+$x+"00"
IF ($LE > 0) GOTO LOOPLE ELSE $ren=$ren+"0000" ENDIF
Writevalue ("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo", "UserName", $ren, "REG_BINARY")
Writevalue ("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Common\UserInfo", "UserName", $ren, "REG_BINARY")
Writevalue ("HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Common\UserInfo", "UserName", $ren, "REG_BINARY")

PPS Мне не очень нравятся последние 3 строчки, может можно узнавать как-то где офис и записывать конкретно, а не создавать ненужные ветки?
Автор: ra1n
Дата сообщения: 04.04.2008 10:05
Вопрос, можно ли на kix сделать следующее:

Юзеру копируется файл
Если файл уже есть на ПК, копирование не происходит

??

Добавлено:
вопрос отменяется..
но есть другой

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

RUN "c:\Documents and Settings\user\Local Settings\Temp\program.exe"
работает нормально, а если напишу -
RUN "\%TEMP%\Bginfo.exe"
то не работает..

Как выйти из положения, подскажите..
Автор: AlexSSS
Дата сообщения: 04.04.2008 16:11
ra1n
> RUN "\%TEMP%\Bginfo.exe" - не работает..
? "\%TEMP%\Bginfo.exe"

теперь понятно?
Автор: toni3d
Дата сообщения: 30.05.2008 12:36
здравствуйте!
нужно выполнить проверку наличия ярлыка на рабочем столе пользователя
и если нет - создать(или переписать откуда нито)

IF EXIST (%UserProfile% + "\Рабочий стол\1С Предприятие.lnk")
DISPLAY %UserProfile% + "\Рабочий стол\users.txt"
ENDIF

на строчку DISPLAY %UserProfile% не обращайте внимание, это просто пока для проверки

здесь будет действие создания или копирования ярлыка

вопрос номер раз - каким символом заменить пробел в имени ярлыка "1С Предприятие" а то скрипт не понимает его(пробел)

и второй, можно ли средствами KiXtart создать ярлык(потому как у пользователей по разному обозван системный диск проще было бы оперировать %SystemDrive%)

Добавлено:
странно, сейчас имя с пробелом нормально отработало

но как создать ярлык пока не знаю
Автор: AlexSSS
Дата сообщения: 30.05.2008 14:48
лови готовый код, который делает ярлыки


Код:

DIM $res
DIM $WSHShell, $DesktopPath
$WSHShell    = CreateObject("WScript.Shell")
$DesktopPath    = $WSHShell.SpecialFolders("Desktop")
$ShortcutName = "$DesktopPath\мой супер ярлык.lnk"
IF not exist($ShortcutName)
    $MyShortcut = $WSHShell.CreateShortcut($ShortcutName)
    $MyShortcut.TargetPath = "m:\common\soft\permit\start.exe"
    $MyShortcut.WorkingDirectory = "m:\common\soft\permit"
    $MyShortcut.WindowStyle = 4
    $MyShortcut.Save()
endif

Автор: toni3d
Дата сообщения: 02.06.2008 09:01
спасибо
скрипт отрабатывается без ошибок но найти ярлык не могу :'(
Автор: AlexSSS
Дата сообщения: 03.06.2008 09:49
а так?

Код:
DIM $res
DIM $WSHShell, $DesktopPath
$WSHShell = CreateObject("WScript.Shell")
$DesktopPath = $WSHShell.SpecialFolders("Desktop")
$ShortcutName = "$DesktopPath\мой супер ярлык.lnk"
IF not exist($ShortcutName)
$MyShortcut = $WSHShell.CreateShortcut($ShortcutName)
$MyShortcut.TargetPath = "c:\windows\notepad.exe"
$MyShortcut.WindowStyle = 4
$MyShortcut.Save()
endif
Автор: toni3d
Дата сообщения: 03.06.2008 10:04
ооо!
все заработало!
спасиба!!!
Автор: rild
Дата сообщения: 06.06.2008 11:58

Цитата:
Сбор информации об железе компьютера
Предварительно скачивается программа mvSysInfo с http://idb.newmail.ru/programs.html
программа работает под любой Win операционкой, начиная с Win95. Скрипт легко переделать под использование любой другой программы, собирающей информацию об железе.
mvSysInfo записывается в подкаталог _Admin пути, который вы задали в $PathLog
Вызов этого скрипта записывается в конец предыдущего скрипта перед EXIT
Call "k_hardware.kix"

Ссылка не найдена,подскажите,где ещё можно её достать?

п.с. а на русском языке есть инструкция ?
Автор: UdAvSt
Дата сообщения: 14.06.2008 20:08
xttp://archive.rin.ru/more/6091.html/
а на русском в администрировании вообще очень мало исрукций, а то что есть - только сбивает, иногда лучше никакой

xttp://narod.yandex.ru/100.xhtml?neoprogs.narod.ru/Utils/05_06_01/mvSysInfo.exe
вот ещё на всякий случай, а то действительно с этой версией всё мёртво
Автор: ss777
Дата сообщения: 25.08.2008 02:59
Интересно начиналась тема, точнее она так и не началась потому как не написано с чего начинать, сразу полезли вопросы про скрипты.
У меня есть следующая задача подключать пользователям домена при входе в систему два сетевых диска.
1-это общая папка (диск)
2-личная папка (диск) для каждого пользователя.
Как это можно сделать с чего начать? Интересует не просто скрипт а куда его положить чтобы он запускался куда положить KIX и т.д.
Автор: AlexSSS
Дата сообщения: 25.08.2008 08:22
ss777
> Интересует не просто скрипт а куда его положить
> чтобы он запускался куда положить KIX и т.д.
для KIX-а эти вопросы решаются аналогично любым другим логонным скриптам

1. проще всего поместить KIX и скрипты на \\DomainController\Netlogon
2. запуск скриптов прописывается или на каждого пользователя через оснастку Active Directory Users and Computers или через политики

подробнее см. в основной ветке по скриптам (ссылка в первом сообщении)
Автор: AlexeyID
Дата сообщения: 04.12.2008 06:42
Помогите новичку. Нужен скрипт по проверке неработающих ссылок в сетевом окружении (nethood).
Вот маленький скрипт, вроде работает если исчезает расшаренный ресурс на другом ПК.

Function DropBadLinkNetHood()
    dim $WSHShell, $FSO, $Folder, $File, $Text, $Sortcut
    
    $FSO = CreateObject("Scripting.FileSystemObject")
    $WSHShell = CreateObject("WScript.Shell")
    $Folder = $FSO.GetFolder($WSHShell.SpecialFolders("NetHood"))
    
    for each $File In $Folder.Subfolders
        $Sortcut = $WSHShell.CreateShortcut($File.files.item("target.lnk"))
        if not exist($Sortcut.TargetPath)
            $File.Delete(true)
        endif
    next
    $ = MessageBox($Text,"")
EndFunction

Если этот ресурс был на ПК где запускается скрипт, то не работает. Как средствами kix или wsh проверить расшарена папка на данном ПК или нет?
Автор: Rrusl
Дата сообщения: 18.12.2008 11:25
Подскажите плиз... как с помощью kix проверить я вляется ли принтер подключенным по умолчанию...
При входе пользователя, я удаляю все принтеры... и хочу запомнить принтер, бывший по умолчанию в перем $DefPrinter
$Index=0
$Printer=""
$DefPrinter=""
Do
    $Printer = lcase(ENUMKEY("HKEY_CURRENT_USER\Printers\Connections\", $Index))
    if SetDefaultPrinter($Printer) = 0
        $DefPrinter=$Printer
    EndIf

        $defpr1="\\" + right(left($Printer,10),8) + "\" + right($Printer,len($Printer)-11)
        $del=DelPrinterConnection($defpr1)
$Index = $Index + 1
Until Len($Printer) = 0

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

Проблема в том, что
if SetDefaultPrinter($Printer) = 0
        $DefPrinter=$Printer
    EndIf
не срабатывает.... тоесть происходит не проверка принтера на использование по умолчанию.... а просто по очереди всем принтерам присваивается значение по умолчанию... и соответственно невозможно восстановить какой принтер использовался по умолч
Автор: abasov
Дата сообщения: 26.02.2009 13:56
Сорри не в тот топ пульнул

Исправляет некорректное имя автора в Office 2003 на ФИО (displayName) из AD.
Собственно баг в кодировке при добавлении в реестр. Коллеги как исправить?
(видимо ldap utf > реестр 1251)


Код: Set fs = CreateObject("Scripting.FileSystemObject")
set WshShell = WScript.CreateObject("WScript.Shell")
' get UserName
strName = WshShell.ExpandEnvironmentStrings("%USERNAME%")

On Error Resume Next

' Constants for the NameTranslate object.
Const ADS_NAME_INITTYPE_DOMAIN = 1
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1179 = 1

Set objNetwork = CreateObject("Wscript.Network")

' Determine DNS domain name from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
If Err.Number <> 0 Then
Wscript.Quit
End If
strDNSDomain = objRootDSE.Get("defaultNamingContext")

' Use the NameTranslate object to find the NetBIOS domain name from the
' DNS domain name.
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_TYPE_NT4, strDNSDomain
objTrans.Set ADS_NAME_TYPE_1179, strDNSDomain
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
' Remove trailing backslash.
strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)

' Use the NameTranslate object to convert the NT user name to the
' Distinguished Name required for the LDAP provider.
objTrans.Init ADS_NAME_INITTYPE_DOMAIN, strNetBIOSDomain
objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strName
strUserDN = objTrans.Get(ADS_NAME_TYPE_1179)

' Bind to the user object in Active Directory with the LDAP provider.
Set objUser = GetObject("LDAP://" & strUserDN)

'Get Common name
strUsername=objUser.Get("displayName") & ", " & objUser.Get("telephoneNumber")
'strUsername= objUser.cn
'WScript.Echo strUsername
'Convert Initials to HEX
For i = 1 to Len(strName)
strInitialsHex = strInitialsHex & "," & Hex(Asc(Mid(strName, i, 1))) & ",00"
Next
strInitialsHex = Right(strInitialsHex , Len(strInitialsHex ) -1)
strInitialsHex = strInitialsHex & ",00,00"

'Convert Username to HEX
For i = 1 to Len(strUsername)
strUsernameHex = strUsernameHex & "," & Hex(Asc(Mid(strUsername, i, 1))) & ",00"
Next
strUsernameHex = Right(strUsernameHex, Len(strUsernameHex) -1)
strUsernameHex = strUsernameHex & ",00,00"

' Create temporary registry file
Const OverwriteIfExist = -1
Const FailIfExist = 0
Const OpenAsASCII = 0
Const OpenAsUnicode = -1
Const OpenAsDefault = -2
sTmpFile = WshShell.ExpandEnvironmentStrings("%TEMP%") & "\UserInfo.reg"
Set fFile = fs.CreateTextFile(sTmpFile, OverwriteIfExist, OpenAsASCII)


' Write to the temporary registry file
fFile.WriteLine "Windows Registry Editor Version 5.00"
fFile.WriteLine
fFile.WriteLine "[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo]"
fFile.WriteLine """UserName""=hex:" & strUsernameHex
fFile.WriteLine """UserInitials""=hex:" & strInitialsHex
fFile.Close

' Import the registry file
WshShell.Run "regedit /s " & sTmpFile, 0, True

' Delete the temporary registry file
fs.DeleteFile sTmpFile
Автор: AlexeyZet
Дата сообщения: 27.03.2009 13:53
Уважаемые!
Нужен скрипт простой, но с заковыркой. Желательно в batch-пакете, но может быть и на kix кто-то знает. ПОдскажите, как сделать?
Задача:
При запуске скрипта в папке F:\Archive создается новая папка с названием, которое должно содержать текущую дату (Типа "archive_19.04.2009"), и затем в эту созданную папку копируется файл back_full.bkf из папки F:\Backup. Всё!

Подскажите готовое решение, или скажите как подставить в имя создаваемой папки текущую дату?

Спасибо откликнувшимся.
Автор: Vby
Дата сообщения: 27.03.2009 14:56
AlexeyZet
Как-то так:
cd F:\Archive
md archive_%date%
copy F:\Backup\back_full.bkf F:\Archive\archive_%date%
Автор: mupybup
Дата сообщения: 20.07.2009 14:14
мужыки а как сделать так шоб для группы пользователей в домене запускался экзешник на всех компах введенных в домен кроме одного ?
Автор: AlexSSS
Дата сообщения: 23.07.2009 20:33
mupybup
ну так делай любые условия, испольуя @wksta и @Ingroup()

Страницы: 12345

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


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