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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Подмена строки из выполненной команды в текстовый файл

Ответить
Настройки темы
CMD/BAT - Подмена строки из выполненной команды в текстовый файл

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


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

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


Имеется команда
Код: Выделить весь код
wmic useraccount where name='username' get sid | find /i "S-"
Требуется результатом команды подменить определенный текст в файле и после этого запустить файл с изменениями.
Текст в файлике примерно такой:
Код: Выделить весь код
HKEY_CURRENT_USER\...
Необходимо заменить
Код: Выделить весь код
"HKEY_CURRENT_USER"
на
Код: Выделить весь код
"HKEY_USERS\%результат выполнения комманды%\"
Посоветуйте как сделать это покрасивее.

Отправлено: 16:22, 22-02-2012

 

Ветеран


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

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


Цитата Jeander:
определенный текст в файле и после этого запустить файл с изменениями »
Файл — есть файл реестра?

Отправлено: 19:02, 22-02-2012 | #2



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

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


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


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

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


Так и есть, reg-файл с ключами реестра, в нём прописан путь до ветки куда нужно добавить ключ, ветка на каждом ПК разная, путь до ветки можно узнать выполняя комманду
Код: Выделить весь код
wmic useraccount where name='username' get sid | find /i "S-"
То есть примерный скрипт выглядит так:
Код: Выделить весь код
wmic useraccount where name='username' get sid | find /i "S-"
;код который заменяет текст в файле reg_file.reg 
;HKEY_CURRENT_USER\software\microsoft\windows...
;на
;HKEY_USERS\%результат_выполнения_команды%\software\microsoft\windows...
REGEDIT /S reg_file.reg
было бы классно обойтись одним исполняемым файлом + reg-файл, или совсем идеальный вариант используя команду REG, но это я уже подпилю.

Отправлено: 19:42, 23-02-2012 | #3


Ветеран


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

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


Цитата Jeander:
reg-файл с ключами реестра »
1. В какой кодировке файл реестра?
2. Его содержимое заранее известно?
3. Устроит ли Вас WSH-скрипт?

Отправлено: 22:53, 23-02-2012 | #4


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


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

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


1. UTF-8
2. Содержание известно, единственно что изменяется это путь до ветки реестра, на каждом ПК он разный. В файлике он представлен в виде "HKEY_CURRENT_USER\software\microsoft\windows...", а необходимо чтобы выглядел "HKEY_USERS\%результат_выполнения_команды%\software\microsoft\windows..."
3. Устроит любое элегантное решение в котором будут сведены к минимуму вмешательства пользователя.

Отправлено: 12:04, 24-02-2012 | #5


Ветеран


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

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


Цитата Jeander:
1. UTF-8 »
Скорее UTF-16LE. В UTF-8 ни разу не приходилось встречать файлы реестра.

Как-то так:
читать дальше »
Код: Выделить весь код
Option Explicit

Const ForReading   = 1
Const ForWriting   = 2
Const TristateTrue = -1

Dim strSID
Dim strContent
Dim strTempFile

strSID = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2" _
	).Get("Win32_UserAccount.Domain='DomainOrMachineName',Name='UserName'").SID

With WScript.CreateObject("Scripting.FileSystemObject")
	With .OpenTextFile("C:\Песочница\0002\Console2.reg", ForReading, False, TristateTrue)
		strContent = .ReadAll()
		.Close
	End With
	
	strTempFile = GetTemporaryName()
	
	With .OpenTextFile(strTempFile, ForWriting, True, TristateTrue)
		.Write Replace(strContent, "HKEY_CURRENT_USER", "HKEY_USERS\" & strSID)
		.Close
	End With
	
	With WScript.CreateObject("WScript.Shell")
		.Run "regedit.exe /s """ & strTempFile & """", 0, True
	End With
	
	.DeleteFile strTempFile, True
End With

WScript.Quit 0
'=============================================================================

'=============================================================================
' Серый форум / vbscript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
    Const TemporaryFolder = 2
    
    Dim strTempName
    
    With WScript.CreateObject("Scripting.FileSystemObject")
        Do
            strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
        Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
    End With
    
    GetTemporaryName = strTempName
End Function
'=============================================================================

1. Откуда Вы будете брать «Domain\UserName»?
2. Какова Ваша конечная цель всего действа?
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:13, 24-02-2012 | #6


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


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

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


Насчет кодировки мог и ошибиться, прошу прощения.

1. UserName можно подставить один раз вручную, он на всех машинах одинаковый. Есть ли возможность обойтись без DomainOrMachineName, так как машины не в домене и имя ПК абсолютно уникально, менять каждый раз ручками не получится.

2. На N-количестве машин с одинаковыми именами пользователя %username%, но с ограниченными правами необходимо поменять определенные ключи реестра. Если точнее, то это настройки безопасности в IE7-8. Естественно reg-файл будет запускаться с правами администратора, но у администратора HKEY_CURRENT_USER отличается от такой же ветки у %username%. Следовательно необходимо сделать записи в зеркало ветки %username% в HKEY_USERS, но пользователи там имеют идентификатор SID(security ID), который уникален на каждой машине. Я выяснил, что SID на любой машине у пользователя %username% можно узнать используя
Код: Выделить весь код
wmic useraccount where name='username' get sid | find /i "S-"
но как подставить это значение в путь в reg-файлике без участия пользователя я к сожалению не знаю.

Отправлено: 21:07, 24-02-2012 | #7


Ветеран


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

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


Jeander,

Так может вообще обойтись без reg-файла? Как пример:
Код: Выделить весь код
@echo off
setlocal

set "wmic=wmic useraccount where name="%username%" get sid /value"

for /f %%i in (' "%wmic%" ') do 1>nul set "%%i"

echo %sid%

:: И дальше заносим нужные ключи в реестр

reg add \\remote_comp\hku\%sid%\....
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:33, 25-02-2012 | #8


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


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

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


То что нужно, спасибо!

Отправлено: 11:44, 27-02-2012 | #9


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


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

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


Если скрипт выполнять из под УЗ администратора на Вин7, то он выходит с ошибкой "Параметр задан неверно", а если из под пользователя которому надо произвести изменения, но через runas /u:Администратор, то нормально. В чем может быть дело?

Отправлено: 11:44, 19-04-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Подмена строки из выполненной команды в текстовый файл

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Команды из коммандной строки? Altaf Microsoft Windows 95/98/Me (архив) 6 05-12-2017 15:58
CMD/BAT - [решено] Непонятный глюк в записи из командной строки в текстовый документ. kefirko Скриптовые языки администрирования Windows 9 12-02-2012 19:54
VBS/WSH/JS - Экспорт значений реестра в общий текстовый файл + добавление доп данных в этот файл fedko Скриптовые языки администрирования Windows 0 17-06-2010 11:52
soft для добовление строки в текстовый документ oIo_DeN_oIo Программное обеспечение Windows 12 15-11-2006 23:06
mySQL или текстовый файл chem1 Программирование и базы данных 12 02-02-2004 03:56




 
Переход