emag

Utilizarea Query Xp_cmdshell pe sistemul de fişiere Windows cu VBScript şi Transact-SQL de Kevin Languedoc

Utilizarea Query Xp_cmdshell pe sistemul de fişiere Windows cu VBScript şi Transact-SQL de Kevin Languedoc

T-SQL are câteva caracteristici uimitoare. Pe langa posibilitatea de a face toate lucrurile standard SQL cu uşurinţă şi echilibru, se poate face, de asemenea, unele grele de ridicare, ajungând în sistemul de operare cu unele puternic Proceduri stocate. Un scurt timp înapoi, am avut placerea de a mă familiariza cu xp_CmdShell procedură stocată.

Într-o coajă de nucă xp_CmdShell oferă o interfaţă cu sistemul de operare Command Shell şi permite utilizatorului de aceleaşi posibilităţi ca de deschidere şi rulează comenzi de la o fereastră shell sau un fişier batch. Imaginaţi-vă posibilitatea de a interogare părţi diferite ale structurii fişierului de configurare sau un computer de la distanţă şi stocarea acestor informaţii într-un tabel pentru scopuri de raportare. Desigur, în scopul de a efectua aceste operaţiuni, aveţi nevoie de acces administrative. De asemenea, trebuie să activaţi procedura stocată şi pentru o medii de producţie de securitate trebuie să fie bine controlate pentru a nu permite accesul la orice indezirabili.

xp_cmdshell Configurare pe SQL Server

Utilizarea xpCmdShell procedură stocată îi impune să permită pe SQL Server. Puteţi realiza acest lucru prin sp_Configure stocate procedura urmată de stateemnt Reconfiguraţi pentru a instala noua configuraţie. Sintaxa generală este: sp_Configure OptionName, ConfigValue Reconfiguraţi

Pentru a permite xpCmdShell procedură stocată

"Xp_cmdshell" Exec sp_configure, 1 Reconfiguraţi

Dacă primiţi următorul mesaj: "" xp_cmdshell "opţiune de configurare nu există, sau poate fi o opţiune avansată." aceasta se datorează faptului că Opţiuni avansate nu sunt configurate şi va să configuraţi aceste primul. Pentru a face acest lucru, problema Opţiuni avansate de comandă, urmată de comanda xp_cmdshell, după cum urmează:

EXEC sp_configure "Show advanced options", 1; GO Reconfiguraţi; GO

"Xp_cmdshell" EXEC sp_configure, 1 GO GO Reconfiguraţi

Get File System ieşire

Odata ce SQL Server este reconfigurat pentru zp_cmdshell puteţi scriere înainte comenzi ca tine ar face din orice shell comanda. Ca un exemplu, să presupunem că ar vrea să vizualizaţi o listă de fişiere exe, care este pe un computer sau server de pe retea pentru scopuri de raportare. Acest lucru ar putea fi realizat cu următoarea comandă:

xp_cmdshell "dir *. exe"

Ieşire:

Volum în unitatea C nu are nici o etichetă. Volume Serial Number este 9CBD-D644 NULL Repertoriul C: WindowsSystem32 NULL 01/24/2007 15:28 124928 accelerometerST.exe 04/14/2008 06:42 184320 accwiz.exe 04/14/2008 06:42 4096 actmovie.exe 04/14/2008 06:42 98304 ahui.exe 04/14/2008 06:42 44544 alg.exe 04/14/2008 06:42 142848 Bootcfg.exe 08/04/2004 08:00 AM 15872 expand.exe 04/14/2008 06:42 24064 extrac32.exe 08/04/2004 08:00 882 fastopen.exe 04/14/2008 06:42 20992 faxpatch.exe 08/04/2004 08 : 00 14848 fc.exe 08/04/2004 08:00 9216 find.exe 04/14/2008 06:42 27136 findstr.exe 08/04/2004 08:00 9216 08/04 finger.exe / 2004 08:00 3072 fixmapi.exe 04/14/2008 06:42 23040 fltmc.exe 04/14/2008 06:42 20992 fontview.exe 04/14/2008 06:42 7680 forcedos.exe 04 / 14 / 2008 06:42 14848 stimon.exe ... 04/14/2008 06:42 165888 wuauclt1.exe 09/28/2006 18:56 146432 WudfHost.exe 08/04/2004 08:00 32256 wupdmgr.exe 04/14/2008 06:42 30720 xcopy . exe 372 File (s) 72569014 octeţi 0 Dir (e) 22951780352 bytes liber

Shell magazin de ieşire comandă în tabelul temporare

Dacă aţi fi dorit pentru a stoca aceste informaţii într-un tabel temp, ai putea executa comanda de mai jos:

crea tabelul de # cmdTable (varchar outputText (3000)) tabel # cmdTable (varchar outputText (3000)) se introduce în # xp_cmdshell cmdTable exec "dir *. exe"

în # xp_cmdshell cmdTable exec "dir *. exe"

xp_cmdshell exec "dir *. exe"

* Selectaţi din cmdTable * # # din tabel drop cmdTable # # tabel cmdTable cmdTable

Shell magazin de ieşire comandă în tabelul Variable

Alternativ, aţi putea stoca aceste informaţii într-o variabilă tabel de executare această comandă în schimb:

Declare @ table fileTable (col1 varchar (4000)) tabel @ fileTable (col1 varchar (4000)) se introduce în @ xp_cmdshell fileTable exec "dir *. exe"

în @ xp_cmdshell fileTable exec "dir *. exe"

xp_cmdshell exec "dir *. exe"

* Selectaţi din @ fileTable

Alte opţiuni

Dacă aveţi nevoie pentru a captura codul de returnare, v-ar declara mai întâi o variabilă pentru codfe şi adăugaţi atribuire de variabilă în faţa comandă de genul:

declare @ exec ret int @ r = xp_cmdshell "dir *. exe", NO_OUTPUT

@ Exec RET int @ r = xp_cmdshell "dir *. exe", NO_OUTPUT

@ RET xp_cmdshell = 'dir *. exe ", NO_OUTPUT

Print @ RET

Print @ ret va întoarce 0 pentru succes. Un eşec ar fi întors un 1. Observaţi, de asemenea, opţiunea de No_Output. Acest lucru spune cmd nu direct nici o ieşire pe ecran.

Concluzie

Aceasta este doar o scurtă introducere în infinite posibilităţi la îndemână şi cum am spus la început puteţi execute orice comanda care este disponibil de la Comandamentul "Cmd" coajă şi puteţi combina cu această ieşire de ieşire din alte comenzi şi stoca informaţii îngrijit într-un tabel.

No comments:

Post a Comment