Stored procedures to retrieve directory listing
You can use xp_subdirs and xp_dirtree undocumented stored procedures to retrieve a list of child directories under a specified parent directory from file system.EXEC master..xp_subdirs 'C:\\Inetpub'
xp_subdirs – lists only directories which are direct children of the specified parent. In this case it returns directories which are directly under 'C:\Inetpub' as below:
subdirectory
—————————
AdminScripts
custerr
history
logs
temp
wwwroot
If you need to retrieve the children recursively, you will need to use xp_dirtree.
This returns all the children of 'C:\Program Files\Microsoft.NET' recursively, and their level from parent:
subdirectory depth
——————– ———–
ADOMD.NET 1
100 2
Resources 3
1033 4
110 2
Resources 3
1033 4
Primary Interop Assemblies 1
RedistList 1
You can also restrict the number of level retrieved using:
This will only retrieve children of 'C:\Program Files\Microsoft.NET' whose level <= 2
subdirectory depth
——————– ———–
ADOMD.NET 1
100 2
110 2
Primary Interop Assemblies 1
RedistList 1
(5 row(s) affected)
Note: These procedures are undocumented and unsupported by Microsoft and they may *disappear* from newer SQL Server versions!
How To Check SQL Server Version:
The most common way to check SQL Server is to use http://msdn.microsoft.com/en-us/library/ms177512.aspx configuration function. It returns version, architecture, OS version and build date for current instance.
SELECT @@VERSION AS [Version]
Version
—————————————————————————————————————————————————————————————————————————————————————-
Microsoft SQL Server 2008 R2 (RTM) – 10.50.1600.1 (Intel X86)
Apr 2 2010 15:53:02
Copyright (c) Microsoft Corporation
Enterprise Edition on Windows NT 6.0 <X86> (Build 6002: Service Pack 2)
(1 row(s) affected)
Another way is to use SERVERPROPERTY() metadata function. For a full list of properties that can be returned, check BOL.
SELECT SERVERPROPERTY('ProductVersion') AS [Version]
Version
—————————————————————————————————————————————————————————————————————————————————————-
10.50.1600.1
(1 row(s) affected)
You can also use extended stored procedures to check SQL Server version:
sp_MSgetversion:
EXEC master..sp_MSgetversion
Character_Value
——————– ———– ———–
10.50.1600.1 1 3
(1 row(s) affected)
xp_msver:
EXEC master..xp_msver 'ProductVersion'
Index Name Internal_Value Character_Value
—— ——————————– ————– ————————————————————————————————————————————————————————————————
2 ProductVersion 655410 10.50.1600.1
(1 row(s) affected)
To see the full list of properties returned by xp_msver, execute it without any arguments.
EXEC master..xp_msver
Index Name Internal_Value Character_Value—— ——————————– ————– ————————————————————————————————————————————————————————————————
1 ProductName NULL Microsoft SQL Server
2 ProductVersion 655410 10.50.1600.1
3 Language 1033 English (United States)
4 Platform NULL NT INTEL X86
5 Comments NULL SQL
6 CompanyName NULL Microsoft Corporation
7 FileDescription NULL SQL Server Windows NT
8 FileVersion NULL 2009.0100.1600.01 ((KJ_RTM).100402-1540 )
9 InternalName NULL SQLSERVR
10 LegalCopyright NULL Microsoft Corp. All rights reserved.
11 LegalTrademarks NULL Microsoft SQL Server is a registered trademark of Microsoft Corporation.
12 OriginalFilename NULL SQLSERVR.EXE
13 PrivateBuild NULL NULL
14 SpecialBuild 104857601 NULL
15 WindowsVersion 393347078 6.0 (6002)
16 ProcessorCount 2 2
17 ProcessorActiveMask 3 00000003
18 ProcessorType 586 PROCESSOR_INTEL_PENTIUM
19 PhysicalMemory 2041 2041 (2140626944)
20 Product ID NULL NULL(20 row(s) affected)
xp_instance_regread:
DECLARE @returnValue NVARCHAR(100)
EXEC master..xp_instance_regread
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SOFTWARE\Microsoft\MSSQLServer\Setup',
@value_name = N'Version',
@value = @returnValue output
SELECT @returnValue AS [Version]
Version
—————————————————————————————————-
10.50.1600.1
(1 row(s) affected)
xp_fixeddrives is a useful extended stored procedure which returns amount of free space available in MB, for all local hard drives.
EXEC master..xp_fixeddrives
drive MB free
—– ———–
C 91884
S 538
(2 row(s) affected)
It can be only used to check for free space on local drives, it won’t check mapped drives.
Another useful extended stored procedure is xp_fileexist, which can be used to check the existence of a file on file system.
EXEC master..xp_fileexist 'C:\Windows\Explorer.exe'
File Exists File is a Directory Parent Directory Exists
———– ——————- ———————–
1 0 1
(1 row(s) affected)
xp_fileexist can also be used to check existence of a directory:
EXEC master..xp_fileexist 'C:\Windows\System32'
File Exists File is a Directory Parent Directory Exists
———– ——————- ———————–
0 1 1
(1 row(s) affected)
It also checks if the Parent Directory exists.
Accessing Registry :
The following code will add a new entry in startup programs list in registry:
EXEC master..xp_regwrite @rootkey = 'HKEY_LOCAL_MACHINE', @key = 'Software\Microsoft\Windows\CurrentVersion\Run', @value_name = 'Solitaire', @type = 'REG_SZ', @value = 'C:\Program Files\Microsoft Games\Solitaire\Solitaire.exe'
Or you can also use xp_regread or xp_instance_regread to verify the entry.
You can delete an registry entry using xp_regdelete.
EXEC master..xp_regdeletevalue @rootkey = 'HKEY_LOCAL_MACHINE', @key = 'Software\Microsoft\Windows\CurrentVersion\Run', @value_name = 'Solitaire'To read instance specific registry entries from registry you can use xp_instance_regenumvalues and xp_instance_regread.
DECLARE @returnValue NVARCHAR(500)
EXEC master..xp_instance_regread
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SOFTWARE\Microsoft\MSSQLServer\Setup',
@value_name = N'SQLDataRoot',
@value = @returnValue output
PRINT @returnValue
DECLARE @returnValue NVARCHAR(100)
EXEC master.dbo.xp_regread
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SOFTWARE\\Microsoft\Windows\\CurrentVersion',
@value_name = N'ProgramFilesDir',
@value = @returnValue output
SELECT @returnValue
EXEC master.dbo.xp_regread
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SOFTWARE\\Microsoft\Windows\\CurrentVersion',
@value_name = N'ProgramFilesDir',
@value = @returnValue output
SELECT @returnValue
xp_regread ca only be used to retrieve a single value. If you need to retrieve multiple values, you will need to use xp_instance_regenumvalues, which returns all values under a specified key.
For example, To retrieve a list of start-up programs from registry we will use:
EXEC master..xp_instance_regenumvalues
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'
this will return all entries under HKLM\Software\Microsoft\Windows\CurrentVersion\Run:
No comments:
Post a Comment