Показать полную графическую версию : [решено] Сценарий входа
СаркозаН
02-09-2009, 11:14
Доброго Всем времени суток. Возникла необходимость завоять следующий сценарий входа пользователя в систему: Определить доменное имя текущего компюьтера, которое имеет вид компьютер-1, взять его последний символ (то бишь 1, что по сути является его порядковым номером), поставить этот символ в конец имени исполняемого файла (файл1.exe) и запустить файл. Файлы создавать не нужно. Они уже существуют. Имена файлов и компьютеров имеют одинаковую длинну. Если имя компьютера не соответствует условию (то есть не имеет формат компьютер-1) или если не найден файл - необходимо вывести сообщение об ошибке. Заранее спасибо.
СаркозаН, как вариант через RegExp (Computer-1/File_1):
Set objRegExp = CreateObject("VBScript.RegExp")
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("WScript.Shell")
objRegExp.Pattern = "^Computer-\d+$"
objRegExp.IgnoreCase = True
strComputer = objNetwork.ComputerName
If objRegExp.Test(strComputer) Then
objRegExp.Pattern = "^.*?(\d+)$"
strFile = "File_" & objRegExp.Replace(strComputer, "$1") & ".exe"
WScript.Echo "FileName: "& strFile
objShell.Run "strFile"
Else
WScript.Echo "Computer Name Error!"
End If
СаркозаН
03-09-2009, 02:19
amel27, При описании проблемы я не указал два очень важных ньюанса: машина находится в домене, поэтому доменное имя имеет вид компьютер-1.имя_домена, то есть часть имя_домена не нужно учитывать (наверное изза этого появляется Computer Name Error!) и второй момент: запускаемый файл, как и сам скрипт находятся в сети. Подскажите пожалуйста как будет выглядеть код в этом случае.
При описании проблемы я не указал два очень важных ньюанса »
1. objNetwork.ComputerName возвращает имя станции без домена;
2. скрипту нужно передать всё имя до цифр (включая дефис);
отладочный вариант с указанием пути к файлу и выводом промежуточных данных:
Set objRegExp = CreateObject("VBScript.RegExp")
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("WScript.Shell")
strName = "Computer-"
strFile = "File_"
strPath = "\\SERVER\SHARE"
objRegExp.Pattern = "^" & strName & "\d+$"
objRegExp.IgnoreCase = True
strComputer = objNetwork.ComputerName
WScript.Echo "ComputerName: " & vbTAB & """" & strComputer & """" & vbCRLF & _
"Pattern String: " & vbTAB & """" & objRegExp.Pattern & """"
If objRegExp.Test(strComputer) Then
objRegExp.Pattern = "^.*?(\d+)$"
strFile = strPath & "\" & strFile & objRegExp.Replace(strComputer, "$1") & ".exe"
WScript.Echo "FileName: "& strFile
objShell.Run "strFile"
Else
WScript.Echo "Computer Name Error!"
End If
СаркозаН
04-09-2009, 09:31
отладочный вариант с указанием пути к файлу и выводом промежуточных данных: »
При запуске скрипта имя компа определяется верно, пути и имена файлов тож верные, но выдает ошибку
Сценарий: \\шара\файл.lnk
Строка: 21
Символ: 4
Ошибка: Не удается найти указанный файл
Код: 80070002
Источник: (null)
Не удается найти указанный файл »
1. если не находит файл, значит его либо нет, либо к нему у скрипта нет доступа
2. предупреждать надо, что это не обычный EXE, для запуска ярлыков вместо метода "Run" объекта "WScript.Shell" нужно использовать метод "ShellExecute" объекта "Shell.Application":
' ...
Set objApp = CreateObject("Shell.Application")
' ...
objApp.ShellExecute "strFile"
' ...
СаркозаН
05-09-2009, 11:15
amel27 », ОГРОМНОЕ Вам спасибо!!! И на практике помогли, и разъяснили разницу между запуском ехе-файлов и lnk! Приведу конечный код скрипта:
Set objRegExp = CreateObject("VBScript.RegExp")
Set objNetwork = CreateObject("WScript.Network")
Set objApp = CreateObject("Shell.Application")
strName = "Computer-"
strFile = "File"
strPath = "\\ServerName\Test"
objRegExp.Pattern = "^" & strName & "\d+$"
objRegExp.IgnoreCase = True
strComputer = objNetwork.ComputerName
WScript.Echo "ComputerName: " & vbTAB & """" & strComputer & """" & vbCRLF & _
"Pattern String: " & vbTAB & """" & objRegExp.Pattern & """"
If objRegExp.Test(strComputer) Then
objRegExp.Pattern = "^.*?(\d+)$"
strFile = strPath & "\" & strFile & objRegExp.Replace(strComputer, "$1") & ".lnk"
WScript.Echo "FileName: "& strFile
objApp.ShellExecute strFile
Else
WScript.Echo "Computer Name Error!"
End If
Надеюсь еще кому-нибудь пригодится! Тему можно считать закрытой.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.