Aracılığıyla paylaş


xp_cmdshell (Transact-SQL)

Bir Windows komut kabuğu olarak çoğaltılır ve çalıştırılmak üzere bir dize gönderir.Metin satırları çıkış verir.

Topic link iconTransact-SQL sözdizimi kuralları

xp_cmdshell { 'command_string' } [ , no_output ]

Bağımsız değişkenler

  • '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.Tek BIR çift tırnak işaretleri içinde dosya yollarını boşluk varsa veya program adlarını başvurulan gereklidir command_string. Katıştırılmış boşluklar ile ilgili sorun olursa, geçici bir çözüm olarak FAT 8.3 dosya adları kullanarak göz önünde bulundurun.

  • no_output
    Çıktı için döndürülmelidir belirten isteğe bağlı bir parametre, iş istemci.

Dönüş Kodu Değerleri

0 (başarılı) veya 1 (hata)

Sonuç Kümeleri

Aşağıdaki yürütülüyor xp_cmdshell deyim geçerli dizinin dizin listesini döndürür.

EXEC xp_cmdshell 'dir *.exe';
GO

Satırları döndürülür bir nvarchar(255) sütun. If the no_output option is used, only the following will be returned:

The command(s) completed successfully.

Remarks

Windows işlemi tarafından kökenli xp_cmdshell aynı güvenlik hakları vardır.SQL Server Hizmet hesabı'nı tıklatın.

xp_cmdshell zaman uyumlu olarak çalışır.Komut kabuğu komutu tamamlanıncaya kadar denetimi çağırana döndürülmez.

xp_cmdshell etkin ve olması ilke tabanlı yönetim kullanarak veya yürütülmesini devre dışısp_configure.Daha fazla bilgi için bkz: yüzey alanı yapılandırma'ı anlama ve xp_cmdshell seçeneği.

Important noteImportant Note:

If xp_cmdshell toplu iş iş işlemi içinde yürütülür ve bir hata döndürür, toplu iş iş iş başarısız olur.Bu davranış, bir değişikliktir.In earlier versions of Microsoft SQL Server the batch would continue to execute.

xp_cmdshell yetkili hesap

Üyesi olmayan bir kullanıcı tarafından çağrıldığında sysadmin sabit sunucu rolüxp_cmdshell adlı kimlik bilgileri depolanan parolanın ve hesabın adı'nı kullanarak Windows bağlanır.## xp_cmdshell_proxy_account ##.Bu proxy kimlik bilgilerini, yoksa xp_cmdshell başarısız olur.

yetkili hesap kimlik bilgileri çalıştırarak oluşturulabilir. sp_xp_cmdshell_proxy_account.Bu saklı yordam, bağımsız değişken olarak bir Windows kullanıcı adı ve parolasını alır.Örneğin, aşağıdaki komut Windows etki alanı kullanıcısı için bir proxy kimlik bilgilerini oluşturur. SHIPPING\KobeR Windows parolası olan sdfh%dkc93vcMt0.

EXEC sp_xp_cmdshell_proxy_account 'SHIPPING\KobeR','sdfh%dkc93vcMt0'

Daha fazla bilgi için bkz:sp_xp_cmdshell_proxy_account (Transact-SQL).

İzinler

DENETIM SERVER iznine gerek duyar.

Örnekler

C.Yürütülebilir dosyaların listesini döndürülüyor

Aşağıdaki örnekte gösterildiği xp_cmdshell genişletilmiş saklı yordam dizini komut yürütülüyor.

EXEC master..xp_cmdshell 'dir *.exe'

b.Windows net komutları kullanarak

Aşağıdaki örnek, kullanımını gösterir. xp_cmdshell içinde bir saklı yordam. Bu örnek kullanarak kullanıcıya bildirir. net send örnek SQL Server yaklaşık kapatılması için sunucu kullanarak duraklatır. net pauseve sonra kullanarak sunucu kapandığında 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.Çıktı döndürülüyor

Aşağıdaki örnek kullanır. xp_cmdshell bir komut dizesi, istemciye çýktý dönmeden çalıştırmak için .

USE master;
EXEC xp_cmdshell 'copy c:\SQLbcks\AdvWorks.bck
    \\server2\backups\SQLbcks, NO_OUTPUT';
GO

d.Döndürülen durum kullanma

Aşağıdaki örnekte, xp_cmdshell genişletilmiş saklı yordam aynı zamanda, döndürülen durum önerir. Dönüş kodu değeri değişken olarak saklanır @result.

DECLARE @result int
EXEC @result = xp_cmdshell 'dir *.exe'
IF (@result = 0)
   PRINT 'Success'
ELSE
   PRINT 'Failure'

e.Değişken içeriğini bir dosyaya yazılıyor

Aşağıdaki örnek, içeriğini yazar @var değişken adlı bir dosyaya var_out.txt Geçerli sunucu dizinde.

DECLARE @cmd sysname, @var sysname
SET @var = 'Hello world'
SET @cmd = 'echo ' + @var + ' > var_out.txt'
EXEC master..xp_cmdshell @cmd

f.Bir komut dosyasına sonucu yakalanıyor

Aşağıdaki örnek, geçerli dizinin içeriğini adlı bir dosyaya yazar. dir_out.txt Geçerli sunucu dizinde.

DECLARE @cmd sysname, @var sysname
SET @var = 'dir/p'
SET @cmd = @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd