Utilizarea Query Xp_cmdshell pe sistemul de fisiere Windows cu VBScript si Transact-SQL de Kevin Languedoc
T-SQL are câteva caracteristici uimitoare. Pe langa posibilitatea de a face toate lucrurile standard SQL cu usurinta si 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 ma familiariza cu xp_CmdShell procedura stocata.
Într-o coaja de nuca xp_CmdShell ofera o interfata cu sistemul de operare Command Shell si permite utilizatorului de aceleasi posibilitati ca de deschidere si ruleaza comenzi de la o fereastra shell sau un fisier batch. Imaginati-va posibilitatea de a interogare parti diferite ale structurii fisierului de configurare sau un computer de la distanta si stocarea acestor informatii într-un tabel pentru scopuri de raportare. Desigur, în scopul de a efectua aceste operatiuni, aveti nevoie de acces administrative. De asemenea, trebuie sa activati procedura stocata si pentru o medii de productie de securitate trebuie sa fie bine controlate pentru a nu permite accesul la orice indezirabili.
xp_cmdshell Configurare pe SQL Server
Utilizarea xpCmdShell procedura stocata îi impune sa permita pe SQL Server. Puteti realiza acest lucru prin sp_Configure stocate procedura urmata de stateemnt Reconfigurati pentru a instala noua configuratie. Sintaxa generala este: sp_Configure OptionName, ConfigValue Reconfigurati
Pentru a permite xpCmdShell procedura stocata
"Xp_cmdshell" Exec sp_configure, 1 Reconfigurati
Daca primiti urmatorul mesaj: "" xp_cmdshell "optiune de configurare nu exista, sau poate fi o optiune avansata." aceasta se datoreaza faptului ca Optiuni avansate nu sunt configurate si va sa configurati aceste primul. Pentru a face acest lucru, problema Optiuni avansate de comanda, urmata de comanda xp_cmdshell, dupa cum urmeaza:
EXEC sp_configure "Show advanced options", 1; GO Reconfigurati; GO
"Xp_cmdshell" EXEC sp_configure, 1 GO GO Reconfigurati
Get File System iesire
Odata ce SQL Server este reconfigurat pentru zp_cmdshell puteti scriere înainte comenzi ca tine ar face din orice shell comanda. Ca un exemplu, sa presupunem ca ar vrea sa vizualizati o lista de fisiere exe, care este pe un computer sau server de pe retea pentru scopuri de raportare. Acest lucru ar putea fi realizat cu urmatoarea comanda:
xp_cmdshell "dir *. exe"
Iesire:
Volum în unitatea C nu are nici o eticheta. 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 octeti 0 Dir (e) 22951780352 bytes liber
Shell magazin de iesire comanda în tabelul temporare
Daca ati fi dorit pentru a stoca aceste informatii î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"
* Selectati din cmdTable * # # din tabel drop cmdTable # # tabel cmdTable cmdTable
Shell magazin de iesire comanda în tabelul Variable
Alternativ, ati putea stoca aceste informatii într-o variabila tabel de executare aceasta comanda î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"
* Selectati din @ fileTable
Alte optiuni
Daca aveti nevoie pentru a captura codul de returnare, v-ar declara mai întâi o variabila pentru codfe si adaugati atribuire de variabila în fata comanda 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 esec ar fi întors un 1. Observati, de asemenea, optiunea de No_Output. Acest lucru spune cmd nu direct nici o iesire pe ecran.
Concluzie
Aceasta este doar o scurta introducere în infinite posibilitati la îndemâna si cum am spus la început puteti execute orice comanda care este disponibil de la Comandamentul "Cmd" coaja si puteti combina cu aceasta iesire de iesire din alte comenzi si stoca informatii îngrijit într-un tabel.
Într-o coaja de nuca xp_CmdShell ofera o interfata cu sistemul de operare Command Shell si permite utilizatorului de aceleasi posibilitati ca de deschidere si ruleaza comenzi de la o fereastra shell sau un fisier batch. Imaginati-va posibilitatea de a interogare parti diferite ale structurii fisierului de configurare sau un computer de la distanta si stocarea acestor informatii într-un tabel pentru scopuri de raportare. Desigur, în scopul de a efectua aceste operatiuni, aveti nevoie de acces administrative. De asemenea, trebuie sa activati procedura stocata si pentru o medii de productie de securitate trebuie sa fie bine controlate pentru a nu permite accesul la orice indezirabili.
xp_cmdshell Configurare pe SQL Server
Utilizarea xpCmdShell procedura stocata îi impune sa permita pe SQL Server. Puteti realiza acest lucru prin sp_Configure stocate procedura urmata de stateemnt Reconfigurati pentru a instala noua configuratie. Sintaxa generala este: sp_Configure OptionName, ConfigValue Reconfigurati
Pentru a permite xpCmdShell procedura stocata
"Xp_cmdshell" Exec sp_configure, 1 Reconfigurati
Daca primiti urmatorul mesaj: "" xp_cmdshell "optiune de configurare nu exista, sau poate fi o optiune avansata." aceasta se datoreaza faptului ca Optiuni avansate nu sunt configurate si va sa configurati aceste primul. Pentru a face acest lucru, problema Optiuni avansate de comanda, urmata de comanda xp_cmdshell, dupa cum urmeaza:
EXEC sp_configure "Show advanced options", 1; GO Reconfigurati; GO
"Xp_cmdshell" EXEC sp_configure, 1 GO GO Reconfigurati
Get File System iesire
Odata ce SQL Server este reconfigurat pentru zp_cmdshell puteti scriere înainte comenzi ca tine ar face din orice shell comanda. Ca un exemplu, sa presupunem ca ar vrea sa vizualizati o lista de fisiere exe, care este pe un computer sau server de pe retea pentru scopuri de raportare. Acest lucru ar putea fi realizat cu urmatoarea comanda:
xp_cmdshell "dir *. exe"
Iesire:
Volum în unitatea C nu are nici o eticheta. 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 octeti 0 Dir (e) 22951780352 bytes liber
Shell magazin de iesire comanda în tabelul temporare
Daca ati fi dorit pentru a stoca aceste informatii î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"
* Selectati din cmdTable * # # din tabel drop cmdTable # # tabel cmdTable cmdTable
Shell magazin de iesire comanda în tabelul Variable
Alternativ, ati putea stoca aceste informatii într-o variabila tabel de executare aceasta comanda î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"
* Selectati din @ fileTable
Alte optiuni
Daca aveti nevoie pentru a captura codul de returnare, v-ar declara mai întâi o variabila pentru codfe si adaugati atribuire de variabila în fata comanda 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 esec ar fi întors un 1. Observati, de asemenea, optiunea de No_Output. Acest lucru spune cmd nu direct nici o iesire pe ecran.
Concluzie
Aceasta este doar o scurta introducere în infinite posibilitati la îndemâna si cum am spus la început puteti execute orice comanda care este disponibil de la Comandamentul "Cmd" coaja si puteti combina cu aceasta iesire de iesire din alte comenzi si stoca informatii îngrijit într-un tabel.
Niciun comentariu:
Trimiteți un comentariu