Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tom55

[Resolvido] mais um probleminha com vbscript

Recommended Posts

e ai galera... ká estou novamente com o vbscript!!!!

 

seguinte, estou desenvolvendo um sisteminha de script para rodar na inicialização do micro, fazendo a alteração de duas chaves de registro, na verdade são as chaves que contém o nome do proprietário e a organização a qual pertence o pc

 

Faço um teste(que ainda não está implementado, mas é simples de fazer) e após isso eu salvo um arquivo de log dizendo que foi alterada a chave no micro.

 

problema: Como adicionar o valor que eu quero na chave.

 

consigo mostrar a chave e o valor da mesma, mas não consigo gravar nesta chave o valor.

 

o código que eu tenho até agora é

 

 

Const HKEY_LOCAL_MACHINE = &H80000002

'Variaveis
	Dim fso, MeuArquivo, cNetworkShare, dados, nome, cam


'Caminho onde o txt será salvo
	cNetworkShare = "c:\Temp" 
	
'caminho do registro a ser modificado
	cam = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization"
	
'valor a ser inserido no registro
 nome = "VALOR PARA O REGISTRO"	

	Set objNet = WScript.CreateObject("WScript.Network")
	Set fso = CreateObject("Scripting.FileSystemObject")
	Set MeuArquivo = fso.CreateTextFile(cNetworkShare & "\" & objNet.ComputerName & ".txt", True)
	
	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
	Set objShell = CreateObject("WScript.Shell")
		
				
	dados = dados &	objShell.RegRead _
					("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner") & ","
  dados = dados &	objShell.RegRead _
					("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization")



'	objWMIService.UpdateRecord HKEY_LOCAL_MACHINE,cam, nome
' Atirbui o valor para a sub chave 
' SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization", "VALOR") 


MeuArquivo.Write (dados)
MeuArquivo.Close

MsgBox dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Tom55, tudo Bem.

 

Minha dica para manipulação de registros é usar o reg que vem no WinXP hehe. É uma ferramenta extremamente interessante. Há algum tempo eu

postei no forum um sistema de Remoção de Pen Drive, este se baseia no registro para saber se o pen drive está conectado fisicamente a máquina ou não.

Também podemos bloquear o acesso à pen drives (ou seja, discos de armazenamento removives usb), alterando-se o valor do registro.

 

esse é o tópico: http://forum.imasters.com.br/index.php?showtopic=281809

 

Private Sub s_habilitaPendrive(switch As Boolean)
'Fazemos a habilitação do driver via regedit, necessário ter o reg.exe instalado na máquina.
'Primeiro deletamos a chave, e a criamos com outro valor.

'deleta a chave
Shell (Environ("windir") + "\system32\reg delete HKLM\System\CurrentControlSet\Services\USBSTOR /v Start /f")
Select Case switch
	Case True
		'cria a nova chave com valor 3 que significa que o pendrive está habilitado
		Shell (Environ("windir") + "\system32\reg.exe add HKLM\System\CurrentControlSet\Services\USBSTOR /v Start /t REG_DWORD /d 3 /f")
	Case False
		'cria a chave com o valor 4 que desabilita o pendrive na máquina
		Shell (Environ("windir") + "\system32\reg.exe add HKLM\System\CurrentControlSet\Services\USBSTOR /v Start /t REG_DWORD /d 4 /f")
End Select

End Sub

Agora vem o lance para atribuir valores à chave: É necessário deletá-la e recriá-la com o novo valor, apesar de parecer estranho, foi o único meio que eu descobri para atribuir um valor a certa chave.

 

A função Environ([parametro]) retorna uma constante associada à uma variável global. Por exemplo Environ("windir") retornará o diretório do sistema operacional.

 

Caso não esteja usando o WinXP, é necessário pegar o reg.exe na pasta system32 do WinXP e colocá-lo na pasta system32 do outro windows para que esse possa utilizar os recursos do comando reg.

 

Qualquer dúvida é só falar, e se a dúvida foi esclarecida favor retornar com uma resposta

 

Paulo Mendes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

grande paulo..

 

o grande problema de deletar e criar a chave novamente é que esta é uma chave do windows, então não sei se isso é possível.. acho que é, vou até testar deste modo.

 

 

resolveu parcialmente a dúvida. conheco o reg do windows, mas imagina um parque de 700 máquinas ter de ir de uma em uma saber se as chaves dos registros estão de acordo, por isso o script, joga no servidor e roda na inicialização.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Tom55

 

Estava fazendo alguns testes e pela biblioteca RegTools existe uma função UpdateKey, entretanto eu só consegui fazer funcionar pera uma chave cujo valor seja uma sequência.( REG_SZ)

 

A referência é Registry Access Function

 

A função é:

Dim Retorno As Boolean
Dim Valor as String

Valor = "O Valor que você quer para sua chave"

Retorno = Registry.UpdateKey (HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", "RegisteredOrganization", Valor)

Creio que no seu caso funcione, pois as duas chaves que você me passou são REG_SZ, caso seja um binário ou DWORD esqueça, o jeito que encontrei é deletá-la e criá-la novamente.

 

A função acima retorna um Booleano, logo, se retorno for False quer dizer que houve algum problema na modificação, caso contrário a alteração obteve sucesso.

 

Isso com certeza irá funcionar no VB6.

 

Por favor, poste se sua dúvida foi dirimida.

 

Paulo Mendes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Paulo!

 

bom, valeu pelo toque do update, mas eu só vi agora de manhã.... ontem a tarde eu já havia conseguido solucionar o problema, fazendo daquele modo que voce disse.. deletando e recriando a chave.

 

quanto ao vb6 não posso te dizer se vai funcionar nele ou não(creio q sim) pq eu faço os scripts no notepad mesmo(opção própria) hehe

 

faço dessa forma pois são scripts simples para pequenas alterações aqui nas máquinas da empresa ou para criar logs com informações específicas.

 

segue abaixo o código!

 

Const HKEY_LOCAL_MACHINE = &H80000002

'Variaveis
	Dim fso, MeuArquivo, cNetworkShare, dados, nome, cam, strKeyPath, strKeyPath1


'Caminho onde o txt será salvo
	cNetworkShare = "c:\Temp" 
	

'valor a ser inserido no registro
 nome = "VALOR"	

	Set objNet = WScript.CreateObject("WScript.Network")
	Set fso = CreateObject("Scripting.FileSystemObject")
	Set MeuArquivo = fso.CreateTextFile(cNetworkShare & "\" & objNet.ComputerName & ".txt", True)
	'set para a criação da nova chave
		Set StdOut = WScript.StdOut	
	Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
	Set objShell = CreateObject("WScript.Shell")

		
				
	If objShell.RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner") <> "VALOR" Then
	
	'chave a ser alterada
		strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner"
	
	'deleta a chave
		oReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
	
  'cria a chave
  
   'chave a ser criada
		strKeyPath1 = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
		oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath1
		
		strValueName = "RegisteredOwner"
		strValue = "VALOR"
	  oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strValueName,strValue

End If

	If objShell.RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization") <> "VALOR" Then

	'chave a ser alterada
		strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization"
	
	'deleta a chave
	  oReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
	
  'cria a chave
  
   'chave a ser criada
		strKeyPath1 = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
		oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath1
		
		strValueName = "RegisteredOrganization"
		strValue = "VALOR"
	  oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strValueName,strValue
	  
	   
End If

 

ps. a parte para salvar o log está pela metade pq o pessoal da rede desistiu de fazer log deste evento!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Tom55

 

Fica tranquilo, na verdade funciona sim no vb6, mas como você está executanto scripts direto do servidor acho melhor fazer desta maneira mesmo...até porque quando tiver que alterar uma chave que não seja do tipo REG_SZ vai ter problemas com o UpdateKey.

 

Não sei se pode fazer testes, mas tente executar um .exe feito em vb6 e mandar executar ele usando a função UpdateKey, creio que ficará mais rápido...entretanto é só uma opinião.

 

Vou marcar como resolvido.

 

Flws.

 

Paulo Mendes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e ai Paulo!!

 

pode marcar como resolvido sim!

 

tenho como testar localmente, quando tiver um tempo eu vou fazer o teste, agora está meio complicado, pois peguei um projeto para fazer.

 

valeu as dicas

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.