Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Экранизация кавычек в передаваемом аргументе в скрипт

Ответить
Настройки темы
VBS/WSH/JS - [решено] Экранизация кавычек в передаваемом аргументе в скрипт

Новый участник


Сообщения: 44
Благодарности: 2

Профиль | Отправить PM | Цитировать


Здравствуйте! Вот такой вот скрипт, призван вызывать из контекстного меню оснастки AD "пользователи и компьютеры" программу для удаленного подключение к компьютеру пользователя, но в передаваемом аргументе есть кавычки, которые в AD экранируются с помощью символа \". А в vbs, это вызывает проблемы (
Подскажите как в этой ситуации выкрутится.
Код: Выделить весь код
On Error Resume Next
Set WshShell = CreateObject("WScript.Shell")
set fs=createobject("Scripting.FileSystemObject")
Dim CompName
Dim RunCMD
Dim FilePath
Set objUser = GetObject(Wscript.arguments.Item(0))
CompName = objUser.Get ("wWWHomePage")
If CompName = "" Then WScript.Echo "CompName= " & Wscript.arguments.Item(0)
If CompName = "" Then WScript.quit
If MsgBox ("Подключиться к компьютеру " & CompName & "?",vbOKCancel+vbQuestion,"Серьезно?") = vbCancel Then WScript.quit
If fs.FileExists ("\\dc\NETLOGON\ultravnc\vncviewer.exe") Then FilePath = """\\dc\NETLOGON\ultravnc\vncviewer.exe"""

RunCMD = FilePath & CompName
RetCode = WshShell.Run (RunCMD,5)

Отправлено: 08:07, 11-12-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата yanus74:
Подскажите как в этой ситуации выкрутится. »
Как минимум, для начала убрать «On Error Resume Next» и добавить «Option Explicit» вкупе с объявлением всех используемых переменных. Затем добавить перед последней командой «WScript.Echo RunCMD», запустить, посмотреть, удивиться и добавить пробел между переданным на исполнение файлом и его параметром. Если всё ещё не заработает, нажать в окне, выведенном командой «WScript.Echo RunCMD», комбинацию клавиш «Ctrl-C» и вставить полученный текст из буфера обмена сюда.

Отправлено: 08:51, 11-12-2015 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 44
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
Option Explicit »
Это да, но вопрос в другом. В скрипт передается DN объекта в виде: LDAP://DC.office.zmzgroup.ru/CN=Иванов Иван Иванович,OU=ООО \"Наша Контора\",OU=Пользователи,DC=office,DC=zmzgroup,DC=ru user

в результате, получается уже не два переданных аргумента, а 3:
LDAP://DC.office.zmzgroup.ru/CN=Иванов Иван Иванович,OU=ООО \Наша
Контора\,OU=Пользователи,DC=office,DC=zmzgroup,DC=ru
user

При этом пропадает символ ". Если между \" и \" еще больше пробелов, то количество аргументов становится еще больше.

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

и потом, еще нужно вставить символ " после \, и передать все это в GetObject.

Но как это все реализовать, я не знаю(

Отправлено: 09:12, 11-12-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


yanus74, покажите, как именно у Вас вызов скрипта организован, как привязка:
Цитата yanus74:
скрипт, призван вызывать из контекстного меню оснастки AD "пользователи и компьютеры" »
сделана — я навскидку не помню сейчас деталей реализации.

Отправлено: 11:38, 11-12-2015 | #4


Новый участник


Сообщения: 44
Благодарности: 2

Профиль | Отправить PM | Цитировать


вот эта конструкция решает проблему с пробелами:
Код: Выделить весь код
Set objArgs = WScript.Arguments
Dim LDAPPath
For i = 0 to objArgs.Count - 1
     if objArgs(i) <> "user" Then LDAPPath=LDAPPath & " " & objArgs(i)
Next
Осталось понять, как добавить в эту строковую переменную, в нужное место, символ "

Цитата Iska:
как именно у Вас вызов скрипта организова »
по этой статье http://habrahabr.ru/post/192818/

Отправлено: 11:39, 11-12-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


С моей колокольни, самым правильным будет заменить в свойствах объекта AD прямые кавычки на типографские («ёлочки») или апострофы:
Код: Выделить весь код
ООО «Наша Контора»
ООО 'Наша Контора'
Ибо жёппа из-за кавычек будет не только в этом месте.

Цитата yanus74:
по этой статье http://habrahabr.ru/post/192818/ »
Я так и думал .

Отправлено: 12:07, 11-12-2015 | #6


Новый участник


Сообщения: 44
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
С моей колокольни, самым правильным будет заменить в свойствах объекта AD прямые кавычки на типографские («ёлочки») или апострофы: »
Это простое решение, я к нему пришел сразу, как столкнулся с проблемой.

А по скрипту, я так понял, нужно сделать функцию, которая посчитает количество \ ( гугление показало, что такой функции в VBS нету ), потом сделать цикл, который разложит строку, и после каждого встреченного символа \ добавит Chr(34). И потом уже вызвать функцию GetObject в которую передать переменную.

Из простого скрипта целая программа выходит)

Отправлено: 12:20, 11-12-2015 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата yanus74:
А по скрипту, я так понял, нужно сделать функцию, которая »
yanus74, извращение всё это. Переданный параметр, как и положено, обрамляется кавычками, посему любые «внутренние» кавычки в аргументе будут восприняты некорректно.

Цитата yanus74:
гугление показало, что такой функции в VBS нету »
Можно так:

Код: Выделить весь код
WScript.Echo UBound(Split("12345\67890\qwerty\uiop\asdf", "\"))

Отправлено: 13:42, 11-12-2015 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Экранизация кавычек в передаваемом аргументе в скрипт

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Экранирование кавычек pogo Скриптовые языки администрирования Windows 12 13-10-2015 13:14
Грядёт экранизация биографии Стива Джобса OSZone News Новости информационных технологий 0 09-10-2011 08:30
Разное - [решено] Обработка кавычек в семерке pve Microsoft Windows 7 6 28-01-2010 08:03
Добавление двойных кавычек в путь к файлу Karat19 AutoIt 6 04-11-2009 11:45
Разное - [решено] передача кавычек в XmlHttpRequest harrique Программирование и базы данных 3 26-01-2009 08:29




 
Переход