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.
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.
![]() |
---|
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
See Also