Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сценарий входа (http://forum.oszone.net/showthread.php?t=149562)

СаркозаН 02-09-2009 11:14 1209453

Сценарий входа
 
Доброго Всем времени суток. Возникла необходимость завоять следующий сценарий входа пользователя в систему: Определить доменное имя текущего компюьтера, которое имеет вид компьютер-1, взять его последний символ (то бишь 1, что по сути является его порядковым номером), поставить этот символ в конец имени исполняемого файла (файл1.exe) и запустить файл. Файлы создавать не нужно. Они уже существуют. Имена файлов и компьютеров имеют одинаковую длинну. Если имя компьютера не соответствует условию (то есть не имеет формат компьютер-1) или если не найден файл - необходимо вывести сообщение об ошибке. Заранее спасибо.

amel27 02-09-2009 11:49 1209477

СаркозаН, как вариант через 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 1210099

amel27, При описании проблемы я не указал два очень важных ньюанса: машина находится в домене, поэтому доменное имя имеет вид компьютер-1.имя_домена, то есть часть имя_домена не нужно учитывать (наверное изза этого появляется Computer Name Error!) и второй момент: запускаемый файл, как и сам скрипт находятся в сети. Подскажите пожалуйста как будет выглядеть код в этом случае.

amel27 03-09-2009 10:41 1210262

Цитата:

Цитата СаркозаН
При описании проблемы я не указал два очень важных ньюанса »

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 1211160

Цитата:

Цитата amel27
отладочный вариант с указанием пути к файлу и выводом промежуточных данных: »

При запуске скрипта имя компа определяется верно, пути и имена файлов тож верные, но выдает ошибку
Сценарий: \\шара\файл.lnk
Строка: 21
Символ: 4
Ошибка: Не удается найти указанный файл
Код: 80070002
Источник: (null)

amel27 04-09-2009 12:53 1211332

Цитата:

Цитата СаркозаН
Не удается найти указанный файл »

1. если не находит файл, значит его либо нет, либо к нему у скрипта нет доступа
2. предупреждать надо, что это не обычный EXE, для запуска ярлыков вместо метода "Run" объекта "WScript.Shell" нужно использовать метод "ShellExecute" объекта "Shell.Application":

Код:

' ...
Set objApp = CreateObject("Shell.Application")
' ...
objApp.ShellExecute "strFile"
' ...


СаркозаН 05-09-2009 11:15 1211994

Цитата:

Цитата amel27
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

Надеюсь еще кому-нибудь пригодится! Тему можно считать закрытой.


Время: 20:41.

Время: 20:41.
© OSzone.net 2001-