Udostępnij za pośrednictwem


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.

Topic link iconKonwencje składni języka Transact-SQL

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 noteImportant 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