xp_cmdshell (Transact-SQL)
Spawns powłoki poleceń systemu Windows i przekazuje w ciąg do wykonania.Dowolne dane wyjściowe są zwracane jako wiersze tekstu.
xp_cmdshell { 'command_string' } [ , no_output ]
Argumenty
'command_string'
Is the string that contains a command to be passed to the operating system.command_string is varchar(8000) or nvarchar(4000), with no default.command_string cannot contain more than one set of double quotation marks.Jedną parę cudzysłowów jest wymagany, jeżeli spacje są obecne w ścieżki do plików lub do których odwołuje się nazw programów command_string. Jeśli masz problemy z osadzonych spacji, warto rozważyć użycie nazwy plików FAT 8.3 jako rozwiązanie alternatywne.no_output
Jest parametrem opcjonalne, określając, że nie dane wyjściowe powinny być zwrócone do klient.
Wartości kodów powrotnych
0 (sukces) lub 1 (brak)
Zestawy wyników
Wykonywanie następujących czynności xp_cmdshell instrukcja zwraca listę katalogów bieżącego katalogu.
EXEC xp_cmdshell 'dir *.exe';
GO
Wiersze są zwracane w nvarchar(255) Kolumna. Jeśli no_output Opcja jest używana, zostaną zwrócone wyłącznie następujące:
The command(s) completed successfully.
Remarks
Spawned przez proces systemu Windows xp_cmdshell ma takie same uprawnienia zabezpieczeń, jak SQL Server konto usługa.
xp_cmdshell działa synchronicznie.Formant nie jest zwracana do obiektu wywołującego, aż do zakończenia polecenia powłoki poleceń.
xp_cmdshell może być włączone i wyłączone za pomocą zarządzania opartego na zasadach lub wykonywanie sp_configure.Aby uzyskać więcej informacji zobacz Understanding Surface Area Configuration i xp_cmdshell Option.
Important Note: |
---|
Jeśli xp_cmdshell jest wykonywana w obrębie serii i zwraca błąd, wsadowego zakończy się niepowodzeniem.Jest to zmiana zachowania.In earlier versions of Microsoft SQL Server the batch would continue to execute. |
xp_cmdshell konto proxy
Gdy jest wywoływana przez użytkownika, który nie jest członkiem sysadmin stała rola serwera xp_cmdshell Korzystając z nazwy konta i hasła przechowywanego w poświadczeniach o nazwie łączy systemu Windows**## xp_cmdshell_proxy_account ##**.Jeśli poświadczenia tego serwera proxy nie istnieje, xp_cmdshell nie powiedzie się.
Poświadczenia konta serwera proxy mogą być tworzone przez sp_xp_cmdshell_proxy_account.Jako argumenty ta procedura przechowywana ma podania nazwy użytkownika systemu Windows i hasła.Na przykład następujące polecenie tworzy poświadczeń serwera proxy dla użytkownika domena systemu Windows SHIPPING\KobeR które ma hasło systemu Windows sdfh%dkc93vcMt0.
EXEC sp_xp_cmdshell_proxy_account 'SHIPPING\KobeR','sdfh%dkc93vcMt0'
Aby uzyskać więcej informacji zobaczsp_xp_cmdshell_proxy_account (Transact-SQL).
Uprawnienia
Wymaga uprawnienia CONTROL SERVER.
Przykłady
A.Zwraca listę plików wykonywalnych
W poniższym przykładzie xp_cmdshell rozszerzona procedura składowana, wykonywanie polecenia katalogu.
EXEC master..xp_cmdshell 'dir *.exe'
B.Za pomocą polecenia net systemu Windows
W poniższym przykładzie pokazano użycie xp_cmdshell w procedurze przechowywanej. W tym przykładzie powiadamia użytkowników, przy użyciu net send które wystąpienie SQL Server ma zostać wyłączony, wstrzymuje serwera przy użyciu net pause, a następnie jest zamykany z serwerem przy użyciu net stop.
CREATE PROC shutdown10
AS
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server
shutting down in 10 minutes. No more connections
allowed.', no_output
EXEC xp_cmdshell 'net pause sqlserver'
WAITFOR DELAY '00:05:00'
EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server
shutting down in 5 minutes.', no_output
WAITFOR DELAY '00:04:00'
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server
shutting down in 1 minute. Log off now.', no_output
WAITFOR DELAY '00:01:00'
EXEC xp_cmdshell 'net stop sqlserver', no_output
C.Zwracanie nie dane wyjściowe
W poniższym przykładzie użyto xp_cmdshell wykonać ciąg polecenia bez powrotu dane wyjściowe do klient.
USE master;
EXEC xp_cmdshell 'copy c:\SQLbcks\AdvWorks.bck
\\server2\backups\SQLbcks, NO_OUTPUT';
GO
D.Za pomocą stan zwrotu
W poniższym przykładzie xp_cmdshell rozszerzona procedura składowana sugeruje także stan zwrotu. Wartość Kod zwrotny jest przechowywana w zmiennej @result.
DECLARE @result int
EXEC @result = xp_cmdshell 'dir *.exe'
IF (@result = 0)
PRINT 'Success'
ELSE
PRINT 'Failure'
E.Zapisywanie zawartości zmiennej do pliku
W następującym przykładzie polecenie zapisuje zawartość @var Zmienna w pliku o nazwie var_out.txt w bieżącym katalogu na serwerze.
DECLARE @cmd sysname, @var sysname
SET @var = 'Hello world'
SET @cmd = 'echo ' + @var + ' > var_out.txt'
EXEC master..xp_cmdshell @cmd
F.Wynik polecenia do pliku przechwytywania
W następującym przykładzie polecenie zapisuje zawartość bieżącego katalogu do pliku o nazwie dir_out.txt w bieżącym katalogu na serwerze.
DECLARE @cmd sysname, @var sysname
SET @var = 'dir/p'
SET @cmd = @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd