Microsoft Windows PowerShell and SQL Server 2005 SMO - Part 5 | Database Journal

Microsoft Windows PowerShell and SQL Server 2005 SMO – Part 5

Aug 1, 2007
2 minute read

The above command created the ‘MyDatabase’ database on the
‘HOME’ server, using the default values and path. [Refer Fig 1.1 and 1.2]



Fig 1.1



Fig 1.2

Method 2

Let us assume that we have to create a new database named
‘MyDatabase1’ on the ‘HOME’ server. Let us also assume that the data file
should be 25MB, with the Data file and log file on D drive.

Execute the following command in PowerShell as shown
below. [Refer Fig 1.3]

[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SqlServer.SMO”)  
$Server = new-object (‘Microsoft.SqlServer.Management.Smo.Server’) ‘HOME’
$DataBase = new-object (‘Microsoft.SqlServer.Management.Smo.Database’)
	($Server, “MyDataBase1”)
$FileGrowth = new-object (‘Microsoft.SqlServer.Management.Smo.FileGroup’)
	($DataBase, “PRIMARY”)
$DataBase.FileGroups.Add($FileGrowth)
$DataBaseDataFile = new-object (‘Microsoft.SqlServer.Management.Smo.DataFile’)
	($FileGrowth, “MyDatabas1e_Data”)
$FileGrowth.Files.Add($DataBaseDataFile)
$DataBaseDataFile.FileName = “D:\MyDatabase1_Data.mdf”
$DataBaseDataFile.Size = [double](25.0 * 1024.0)
$DataBaseDataFile.GrowthType = “Percent”
$DataBaseDataFile.Growth = 25.0
$DataBaseDataFile.MaxSize = [double](100.0 * 1024.0)
$DataBaseLogFile = new-object (‘Microsoft.SqlServer.Management.Smo.LogFile’) ($DataBase, “MyDatabase1_Log”)
$DataBaseLogFile.FileName = “D:\MyDatabase1_Log.ldf”
$DataBase.Create()

The above cmdlets creates the ‘Mydatabase1’ database on
the ‘HOME’ server, with a 25MB data file and both the Log file and Data file
are created on D Drive. [Refer Fig. 1.3, 1.4]



Fig 1.3



Fig 1.4

Method 3

Let us create a script that allows us to create any
database on any server with any size and path we like.

Create the following file as shown below and save it as createdb.ps1. [Refer Fig 1.5]

param (
  [string] $ServerName,
  [string] $DatabaseName,
  [Double] $DataSize ,
  [string] $DataPath,
  [string] $LogPath
)
echo “Creating Database…..”
echo “———————-”
echo “Input…”
echo “Server Name : $ServerNameecho “Database Name : $DatabaseNameecho “Data Size  :  $DataSizeecho “Data File Path :  $DataPathecho “Log File Path : $LogPath$LogicalDataFile=$DatabaseName + “_Data”
$LogicalLogFIle=$DatabaseName + “_Log”
$datapath1=$DataPath + “\” + $DatabaseName + “_Data.mdf”
$Logpath1=$LogPath  + “\” + $DatabaseName +  “_Log.ldf”
$DataSize1=[double]($DataSize * 1024.0)
[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SqlServer.SMO”)  
$Server = new-object (‘Microsoft.SqlServer.Management.Smo.Server’) $ServerName
$DataBase = new-object (‘Microsoft.SqlServer.Management.Smo.Database’) ($Server, $DatabaseName)
$FileGrowth = new-object (‘Microsoft.SqlServer.Management.Smo.FileGroup’) ($DataBase, “PRIMARY”)
$DataBase.FileGroups.Add($FileGrowth)
$DataBaseDataFile = new-object (‘Microsoft.SqlServer.Management.Smo.DataFile’) ($FileGrowth, $LogicalDataFile)
$FileGrowth.Files.Add($DataBaseDataFile)
$DataBaseDataFile.FileName = $datapath1
$DataBaseDataFile.Size = [double]( $DataSize1 )
$DataBaseDataFile.GrowthType = “Percent”
$DataBaseDataFile.Growth = 25.0
$DataBaseDataFile.MaxSize = [double](100.0 * 1024.0)
$DataBaseLogFile = new-object (‘Microsoft.SqlServer.Management.Smo.LogFile’) ($DataBase, $LogicalLogFIle)
$DataBaseLogFile.FileName = $Logpath1
$DataBase.Create()
echo “Output….”
echo “Logical name of Data is $LogicalDataFileecho “Logical name of Log is $LogicalLogFileecho “Data File Path is $datapath1echo “Log file path is $LogPath1echo “Size of the file is $DataSize1



Fig 1.5

Now execute the PowerShell script file as shown below. [Refer
Fig 1.6]

./createdb.ps1 HOME MyDatabase2 30 D: D:

Note:

HOME is the server name

MyDatabase2 is the database name

30 is MB data size

D: is the location of the data Path

D: is the location of the Log Path

Output

PS C:\ps> ./createdb.ps1 HOME MyDatabase2 30 D: D:
Creating Database…..
———————-
Input…
Server Name : HOME
Database Name : MyDatabase2
Data Size  :  30
Data File Path :  D:
Log File Path : D:
GAC    Version        Location
—    ——-        ——–
True   v2.0.50727     C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.SMO\9.0.242.0__89845dcd8080cc91\Microsoft.Sql.
Output….
Logical name of Data is MyDatabase2_Data
Logical name of Log is MyDatabase2_Log
Data File Path is D:\MyDatabase2_Data.mdf
Log file path is D:\MyDatabase2_Log.ldf
Size of the file is 30720



Fig 1.6

The following code generates the output, which actually
clutters the desired output.

Code

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")

Output

GAC    Version        Location
—    ——-        ——–
True   v2.0.50727     C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.SMO\9.0.242.0__89845dcd8080cc91\Microsoft.Sql…

This can be avoided by redirecting the output to NULL.

param (
  [string] $ServerName,
  [string] $DatabaseName,
  [Double] $DataSize ,
  [string] $DataPath,
  [string] $LogPath
)
echo “Creating Database…..”
echo “———————-”
echo “Input…”
echo “Server Name : $ServerNameecho “Database Name : $DatabaseNameecho “Data Size  :  $DataSizeecho “Data File Path :  $DataPathecho “Log File Path : $LogPath$LogicalDataFile=$DatabaseName + “_Data”
$LogicalLogFIle=$DatabaseName + “_Log”
$datapath1=$DataPath + “\” + $DatabaseName + “_Data.mdf”
$Logpath1=$LogPath  + “\” + $DatabaseName +  “_Log.ldf”
$DataSize1=[double]($DataSize * 1024.0)
[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SqlServer.SMO”)  | out-null
$Server = new-object (‘Microsoft.SqlServer.Management.Smo.Server’) $ServerName
$DataBase = new-object (‘Microsoft.SqlServer.Management.Smo.Database’) ($Server, $DatabaseName)
$FileGrowth = new-object (‘Microsoft.SqlServer.Management.Smo.FileGroup’) ($DataBase, “PRIMARY”)
$DataBase.FileGroups.Add($FileGrowth)
$DataBaseDataFile = new-object (‘Microsoft.SqlServer.Management.Smo.DataFile’) ($FileGrowth, $LogicalDataFile)
$FileGrowth.Files.Add($DataBaseDataFile)
$DataBaseDataFile.FileName = $datapath1
$DataBaseDataFile.Size = [double]( $DataSize1 )
$DataBaseDataFile.GrowthType = “Percent”
$DataBaseDataFile.Growth = 25.0
$DataBaseDataFile.MaxSize = [double](100.0 * 1024.0)
$DataBaseLogFile = new-object (‘Microsoft.SqlServer.Management.Smo.LogFile’) ($DataBase, $LogicalLogFIle)
$DataBaseLogFile.FileName = $Logpath1
$DataBase.Create()
echo “Output….”
echo “Logical name of Data is $LogicalDataFileecho “Logical name of Log is $LogicalLogFileecho “Data File Path is $datapath1echo “Log file path is $LogPath1echo “Size of the file is $DataSize1

Now execute the PowerShell script file as shown below. [Refer
Fig 1.7]

./createdb.ps1 HOME MyDatabase2 30 D: D:



Fig 1.7

Output

PS C:\ps> ./createdb.ps1 HOME MyDatabase2 30 D: D:
Creating Database…..
———————-
Input…
Server Name : HOME
Database Name : MyDatabase2
Data Size  :  30
Data File Path :  D:
Log File Path : D:
Output….
Logical name of Data is MyDatabase2_Data
Logical name of Log is MyDatabase2_Log
Data File Path is D:\MyDatabase2_Data.mdf
Log file path is D:\MyDatabase2_Log.ldf
Size of the file is 30720

Conclusion

Part 5 of this series has illustrated how to use PowerShell
and PowerShell script to create databases etc.

»


See All Articles by Columnist
MAK

Database Journal Logo

DatabaseJournal.com publishes relevant, up-to-date and pragmatic articles on the use of database hardware and management tools and serves as a forum for professional knowledge about proprietary, open source and cloud-based databases--foundational technology for all IT systems. We publish insightful articles about new products, best practices and trends; readers help each other out on various database questions and problems. Database management systems (DBMS) and database security processes are also key areas of focus at DatabaseJournal.com.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.