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

» Автоматизация администрирования

Автор: distance
Дата сообщения: 10.12.2004 15:38
exMIB
Это код на JScript, следовательно текст должен находиться в файле .js
Автор: AlexisZP
Дата сообщения: 13.12.2004 16:20



Добавлено
igor andreev
distance

Ладно, попробую обьяснить на примере:

set WSHShell = WScript.CreateObject("WScript.Shell")
myString = WSHShell.RegRead(_
"HKLM\Software\Oracle\Home0\oracle_home")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "\\10.108.1.3\i\orant\NET80\ADMIN\tnsnames.ora" , WSHShell.RegRead(_
"HKLM\Software\Oracle\Home0\oracle_home"), true
====
Проблема в том, что когда как Destination в CopyFile указать myString, то осуществится копирование в файл с этим именем.
Если написать все как есть, то выдается ошибка Permission denied.
Проверял разные куски скрипта в отдельности, доступ в реестр есть, мессаджбокс выдает значениее записанное по указанному пути в реестре. Если указать точное значение, то копирование тоже происходит.
Отличие лишь в том, что в реестре написано C:\orant а копирование осуществляется только в c:\orant\. Т.е. в переенную нужно дописать еще и \.
Что можете подсказать по этому поводу?
Спасибо!

Автор: igor andreev
Дата сообщения: 13.12.2004 17:22
AlexisZP

Цитата:
Отличие лишь в том, что в реестре написано C:\orant а копирование осуществляется только в c:\orant\. Т.е. в переенную нужно дописать еще и \.

Ну сам и написал правильный ответ
последняя строчка:
objFSO.CopyFile "\\10.108.1.3\i\orant\NET80\ADMIN\tnsnames.ora" , myString & "\", true
Автор: AlexisZP
Дата сообщения: 14.12.2004 15:30
igor andreev

Я попробовал твой совет, он помог.
До этого пробовал & но без "", прогнал, но прочитать нигде про конкатенацию не нашел.

Вот что у меня получилось:
===
set WSHShell = WScript.CreateObject("WScript.Shell")
myString = WSHShell.RegRead(_
"HKLM\Software\Oracle\Home0\oracle_home")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "\\10.108.8.1\i\orant\NET80\ADMIN\tnsnames.ora" ,myString & "\net80\admin\", true
===
Именно этот кусок кода работает без вопросов, а когда его приписать к тому, что я раньше наваял, и оно уже работал одо этого вполне нормально, то оно не отрабатывает.
Там тоже используется WSHShell, может нужно как-нибудь очищать ее значение?
Вот полный код:
===
Option Explicit
Dim WSHLocalNet, WSHShell, PrinterPath, objFSO
Set WSHLocalNet = WScript.CreateObject("WScript.Network")
Set WSHShell = WScript.CreateObject("WScript.Shell")

'Ставим время см. ниже одной командой
WshShell.run("net time \\10.108.8.1 /set /yes")

''Копирование ТАИС_РЕГ
Set WshShell = WScipt.CreateObject("WScript.Shell")
Set objAgrs = WScript.Arguments

WshShell.run("xcopy \\10.108.8.1\Tais_REG C:\Tais_REG\ /e /y /d")

''Копирование tnsnames:
set WSHShell = WScript.CreateObject("WScript.Shell")
myString = WSHShell.RegRead(_
"HKLM\Software\Oracle\Home0\oracle_home")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "\\10.108.8.1\i\orant\NET80\ADMIN\tnsnames.ora" ,myString & "\net80\admin\", true
===
Спасибо за помощь
Автор: pe3yc
Дата сообщения: 14.12.2004 16:44
AlexisZP
а читать сообщения об ошибках мы конечно не умеем?
******************************
Option Explicit
Dim WSHLocalNet, WSHShell, PrinterPath, objFSO
Set WSHLocalNet = WScript.CreateObject("WScript.Network")
Set WSHShell = WScript.CreateObject("WScript.Shell")

'Ставим время см. ниже одной командой
WshShell.run("net time \\10.108.8.1 /set /yes")

''Копирование ТАИС_РЕГ
'Set WshShell = WScipt.CreateObject("WScript.Shell")
Set objAgrs = WScript.Arguments

WshShell.run("xcopy \\10.108.8.1\Tais_REG C:\Tais_REG\ /e /y /d")

''Копирование tnsnames:
'set WSHShell = WScript.CreateObject("WScript.Shell")
myString = WSHShell.RegRead(_
"HKLM\Software\Oracle\Home0\oracle_home")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "\\10.108.8.1\i\orant\NET80\ADMIN\tnsnames.ora" ,myString & "\net80\admin\", true
===
Автор: igor andreev
Дата сообщения: 14.12.2004 21:46
AlexisZP

Цитата:
Там тоже используется WSHShell, может нужно как-нибудь очищать ее значение?

Достаточно один раз(не три, как у тебя) создать обьект WScript.Shell в начале скрипта.
И pe3yc конечно прав, если уж ты используешь Option Explicit(очень удобная штука для отладки) - то читай сообщения о ошибках, Option Explicit сам тебе подскажет, что в твоем коде не так. В частности, в примере pe3yc скрипт будет ругаться, пока ты не допишешь еще:
Dim objAgrs, myString
Вот, прочитай http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsstmoptionexplicit.asp
А вот если ты уберешь Option Explicit из первой строчки - скрипт тебе и слова не скажет, что ты не обьявил или переопределил какие-то переменные, молча отработает и все. Очищать значение кстати рекомендуется для приличия, в конце скрипта:
Set WSHShell = Nothing
Автор: DarkStar2000
Дата сообщения: 16.12.2004 11:43
А есть какой нибудь способ автоматически закрывать сессии терминал сервера по таймеру
Автор: counter
Дата сообщения: 16.12.2004 11:53
DarkStar2000 есть, в самом терминал-сервере

Автор: AlexSSS
Дата сообщения: 16.12.2004 11:53
> А есть какой нибудь способ автоматически закрывать
> сессии терминал сервера по таймеру
Terminal Services Configuration-->Connections-->RDP-TCP-->Properties-->Sessions
Автор: DarkStar2000
Дата сообщения: 16.12.2004 14:06

Цитата:
Terminal Services Configuration-->Connections-->RDP-TCP-->Properties-->Sessions

несколько не то нужно чтобы например в 23:30 все сессии закрывались независимо от времени открытия, статуса (Активная или нет) а там можно только указать лимит времени на сессию
Автор: AlexSSS
Дата сообщения: 16.12.2004 14:49
> а там можно только указать лимит времени на сессию
там есть более правильные настройки - лимит на idle time - скажем закрывать сессию, если она пассивна 20 минут.

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

кстати, см хелп на "Terminal Services commands" - там можно делать все что хочешь с командной строки
Автор: pe3yc
Дата сообщения: 16.12.2004 19:34
DarkStar2000
скорее всего лучше скрипт написать и запускать его по таймеру, что бы он делел логофф всех
Автор: AlexisZP
Дата сообщения: 17.12.2004 11:49
igor andreev
pe3yc
Спасибо, помогли Ваши советы, но могу на полном серьезе ответить, что у меня никаких сообщений о ошибках не возникало, даже при испльзовании Option Explicit.
Автор: igor andreev
Дата сообщения: 17.12.2004 12:31
AlexisZP
Сообщения о ошибках то возникали, но если ты запускал cscript(не wscript) твой_файл.vbs, то ты их не успевал увидеть Кстати в твоем скрипте переменные PrinterPath и objAgrs вроде как и лишние, нигде не используются.
Автор: AlexisZP
Дата сообщения: 20.12.2004 10:08
igor andreev
Спасибо, я кажется понял свою ошибку .
Переменные не лишние , просто я не весь код выложил, переменные используются
Автор: SlaM2003
Дата сообщения: 20.12.2004 13:18
есть домен под NT4
можно ли с рабочей станции запустить какой-нить скрипт, который запускает процесс на сервере, батник например....
Автор: AlexSSS
Дата сообщения: 20.12.2004 13:45
SlaM2003
можно, только это надо запускать под правами пользователя, у которого есть на это право на сервере ;o) Например, под доменным администратором.

А если опишешь подробнее свою ситуацию, возможно сможем найти и другое решение проблемы
Автор: SlaM2003
Дата сообщения: 21.12.2004 05:11
Я просто интересовался, будут ли работать vbs скрипты под NT4(PDC), или это только фишка win2k.
А задача стоит в том, чтобы мне с моей рабочей станции (WindowsXP) запустить батник, чтоб он выполнялся на сервере, естественно сам себе, все необходимые я права выдать могу.
Пробовал программку remoteexec, но она не совсем корректно работает, батник запускается, но тот процесс, который этот батник вызывает, не идет... в списке процессов появляется, но активности у него ноль. Если батник запускать прям с сервера в ручную, то всё работает нормально.
Вот я и подумал можт это можно сделать штатными средствами.
Автор: psj
Дата сообщения: 21.12.2004 09:32
SlaM2003
Штатными не знаю, но есть такая приблуда: AutoIt, там можно сделать так, что-бы на удаленной машине под любым пользователем, любая программа запускалась.

Добавлено
Пробовал сам - работает замечательно
Автор: SlaM2003
Дата сообщения: 21.12.2004 10:35
Нашел замечательную програмульку PsExec от Sysinternals... как раз что надо.
И всё-таки интересно было бы узнать, возможно-ли это с помощью vbs скриптов.
Автор: bornbill
Дата сообщения: 21.12.2004 12:05
SlaM2003
да возможно смотри в сторону книги script repositoriy точно не помню как называется пиши в ПМ сброшу на мыло
Автор: ShahrayOleg
Дата сообщения: 21.12.2004 15:50
Нужно написать *.bat который делает следующее:
смотрит размер файла и если он меньше 10 метров, то необходимо этот файл удалить.
Как это сделать?
Автор: distance
Дата сообщения: 21.12.2004 17:23
ShahrayOleg
встроенными средствами imho нельзя (даже через продвинутый cmd, а про Win9x и говорить нечего)
варианты:
- использовать wsh/jscript и иже с ним (плюс - встроен в систему)
- поставить внешний коммандный интерпретатор 4dos/4nt (www.jpsoft.com)
(вообще, вешь полезная, я до перехода на wsh года 4 сидел на нем, еще со времен 98)
тогда так:
set fileName=c:\temp\swap.tmp
set fileSize=%@FileSize[%fileName,M]
if %fileSize LE 10 del /z /q %fileName
Автор: igor_andreev
Дата сообщения: 21.12.2004 18:28
ShahrayOleg

Цитата:
Нужно написать *.bat

BAT или CMD ? Если в NT-осях, то можно, по крайней мере в 2000-XP точно работает. Сделай *.cmd

Код:
@echo off
echo Size of %~nx1 is %~z1
pause
Автор: ShahrayOleg
Дата сообщения: 22.12.2004 10:13
igor_andreev
Спасибо. Работает
Автор: Garreth
Дата сообщения: 27.12.2004 16:46
Подскажите как корректно удалить Radmin с компов по сети. В сети домен. Нужен скрипт, который удалит целиком программу. То есть c:\winnt\system32\r_server.exe /uninstall /silence не подходит.
Автор: AlexSSS
Дата сообщения: 27.12.2004 17:05
а что именно не подходит?
1. если нужны права админа, то тогда легче запустить эту строку не скриптом, а с дистанционно с другого компа, напр с момощью PSEXEC от Sysinternals - www.sysinternals.com
Можно написать и скрипт, который возьмет из AD имена всех компов домена и запустит на каждом строку анинсталляции Radmin-a. Если он там не стоит, то ничего страшного не будет
2. Если остаются файлы, то их просто стираешь после анинсталляции
Автор: Garreth
Дата сообщения: 27.12.2004 18:27
AlexSSS
спасибо помогло

Другой вопрос. Как скриптом определить какая ОС на клиентском ПК? Нужно в домене установить в тихом режиме AD extensions только на windows 98? Киньте скриптом кто может, плиз.
Автор: FreemanRU
Дата сообщения: 27.12.2004 19:12
Garreth

Код:
Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Wscript.Echo "Boot Device: " & objOperatingSystem.BootDevice
Wscript.Echo "Build Number: " & objOperatingSystem.BuildNumber
Wscript.Echo "Build Type: " & objOperatingSystem.BuildType
Wscript.Echo "Caption: " & objOperatingSystem.Caption
Wscript.Echo "Code Set: " & objOperatingSystem.CodeSet
Wscript.Echo "Country Code: " & objOperatingSystem.CountryCode
Wscript.Echo "Debug: " & objOperatingSystem.Debug
Wscript.Echo "Encryption Level: " & objOperatingSystem.EncryptionLevel
dtmConvertedDate.Value = objOperatingSystem.InstallDate
dtmInstallDate = dtmConvertedDate.GetVarDate
Wscript.Echo "Install Date: " & dtmInstallDate
Wscript.Echo "Licensed Users: " & _
objOperatingSystem.NumberOfLicensedUsers
Wscript.Echo "Organization: " & objOperatingSystem.Organization
Wscript.Echo "OS Language: " & objOperatingSystem.OSLanguage
Wscript.Echo "OS Product Suite: " & objOperatingSystem.OSProductSuite
Wscript.Echo "OS Type: " & objOperatingSystem.OSType
Wscript.Echo "Primary: " & objOperatingSystem.Primary
Wscript.Echo "Registered User: " & objOperatingSystem.RegisteredUser
Wscript.Echo "Serial Number: " & objOperatingSystem.SerialNumber
Wscript.Echo "Version: " & objOperatingSystem.Version
Next
Автор: AlexSSS
Дата сообщения: 27.12.2004 19:23
можно еще проще, даже в батнике
if NOT (%OS%) == (Windows_NT) ECHO URRA

вариант, который не всегда может быть верен, но если в сети только виндусовые машины, он сработает.
переменная окружения OS в Windows NT4/2000/XP = Windows_NT
соответственно все остальное - 95/98

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


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