Простейший скрипт работает через раз.

Windows Script Host (WSH), WMI, vbs скрипты и т.д. Создание и применение скриптов.

Модератор: Модераторы

Новый участник
Сообщения: 2
Зарегистрирован: 06 фев 2007, 14:59

Сообщение pavelkq » 06 фев 2007, 15:17

Привет! Изучил в общих чертах VB и написал скрипат (вернее скомпановал из имеющегося в сети):
Код
Dim UsrNam
Set wshshell = WScript.CreateObject("WScript.Shell")
My_String ="net use y: /delete"
Return = wshshell.Run (My_String, 1, True)
My_String ="net use z: /delete"
Return = wshshell.Run (My_String, 1, True)
My_String ="net use z: \\server-1\users\"
Set WshNetwork = CreateObject("WScript.Network")
Set oShell = CreateObject("Shell.Application")

UsrNam = ""
While UsrNam = ""
WScript.Sleep 100 ' 1/10 th of a second
UsrNam = WSHNetwork.UserName
Wend

My_String =My_String & UsrNam
Return = wshshell.Run (My_String, 1, True)
My_String ="net use y: \\server-1\users\общая"
Return = wshshell.Run (My_String, 1, True)

oShell.NameSpace("y:").Self.Name = "Oбщий диск обмена"
oShell.NameSpace("z:").Self.Name = UsrNam

WScript.Quit(0)
[/code]


И еще такой вариант:
Код
Dim UsrNam
on error resume next
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.RemoveNetworkDrive "y:", "true", "true"
WshNetwork.RemoveNetworkDrive "z:", "true", "true"

do while wshNetwork.username = ""
WScript.Sleep 250
loop

UsrNum = "\\Server1\Users\" & wshNetwork.username

WshNetwork.MapNetworkDrive "y:", "\\Server1\Users\общая", "true"
WshNetwork.MapNetworkDrive "z:", UsrNum, "true"

Set oShell = CreateObject("Shell.Application")
oShell.NameSpace("y:").Self.Name = "Oбщий диск"
oShell.NameSpace("z:").Self.Name = WSHNetwork.ComputerName
WScript.Quit(0)
[/code]

Как видите, используются разные объекты, но суть одна и та же. Но проблема в том, что срипт помещен в групповой политике в автозагрузку пользователей, и он не всегда отрабатывает. Иногда Z подключается, а иногда нет. Y подключается всегда.
Первый вариант, с WScript.Shell работает чуть лучше, но все равно часто глючит. Где искать собаку?
Активный пользователь
Сообщения: 1229
Зарегистрирован: 08 июл 2004, 06:17
Откуда: Новосибирск

Сообщение slz » 07 фев 2007, 10:11

А зачем persistent = true, если Вы маппинг диска при логине удаляете?
Попробуйте:
WshNetwork.MapNetworkDrive "y:", "\\Server1\Users\общая", "False"
WshNetwork.MapNetworkDrive "z:", UsrNum, "False"

Активный пользователь
Аватара пользователя
Сообщения: 117
Зарегистрирован: 23 янв 2004, 15:23
Откуда: KG

Сообщение mirage » 13 фев 2007, 12:05

а почему бы эту проблему не решить при помощи батника? Там эта задача решиться горадо проще (мне так кажеться)
"Любой человек, остановившийся в своем развитии, будет заменен другим."

Новый участник
Сообщения: 2
Зарегистрирован: 06 фев 2007, 14:59

Сообщение pavelkq » 13 фев 2007, 13:02

Я пробовал, но проблема в том, что %username% - это не всегда однозначная переменная. Чаще всего в момент выполнения скрипта она еще не известна (проверено).

Активный пользователь
Аватара пользователя
Сообщения: 117
Зарегистрирован: 23 янв 2004, 15:23
Откуда: KG

Сообщение mirage » 18 апр 2007, 11:00

Цитата (pavelkq @ 13.02.2007 - 12:02)
Я пробовал, но проблема в том, что %username% - это не всегда однозначная переменная. Чаще всего в момент выполнения скрипта она еще не известна (проверено).
[/quote]

есть команда Timeout, жаль что только она внешняя
"Любой человек, остановившийся в своем развитии, будет заменен другим."

Новый участник
Сообщения: 11
Зарегистрирован: 10 апр 2007, 15:31

Сообщение servilat » 18 апр 2007, 11:23

можно попробовать диск Z мапить в свойствах пользователя AD - профили домашняя папка пользователя.

Активный пользователь
Сообщения: 1229
Зарегистрирован: 08 июл 2004, 06:17
Откуда: Новосибирск

Сообщение slz » 18 апр 2007, 12:49

pavelkq
Цитата
Я пробовал, но проблема в том, что %username% - это не всегда однозначная переменная. Чаще всего в момент выполнения скрипта она еще не известна (проверено).
[/quote]

Так а Вы куда скрипт прилепили?
%username% - появляется после логина пользователя, а не после загрукзи ОС, поэтому %username% - всегда однозначна.
Вот этот кусок кода обеспечивает задержку, попробуйте увеличить.
Код
do while wshNetwork.username = ""
WScript.Sleep 250
loop
[/code]
Активный пользователь
Аватара пользователя
Сообщения: 117
Зарегистрирован: 23 янв 2004, 15:23
Откуда: KG

Сообщение mirage » 18 апр 2007, 13:18

нет %username% он пробывал в батнике его использовать а не в ВХС скрипте, я так его понял. А в батниках действительно почему то при логоне %username% не всегда коректно срабатывает.
"Любой человек, остановившийся в своем развитии, будет заменен другим."

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8