<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://winserverteam.org.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Austin Osuide&amp;#39;s Windows Server and Random Rants Blog : Fun, Windows Vista</title><link>http://winserverteam.org.uk/blogs/austin/archive/tags/Fun/Windows+Vista/default.aspx</link><description>Tags: Fun, Windows Vista</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Burn CD's and DVDs with Powershell</title><link>http://winserverteam.org.uk/blogs/austin/archive/2007/11/02/burn-cd-s-and-dvds-with-powershell.aspx</link><pubDate>Fri, 02 Nov 2007 21:47:00 GMT</pubDate><guid isPermaLink="false">2f64b580-8b3f-461a-8545-1e65ae7cb030:80</guid><dc:creator>Austin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://winserverteam.org.uk/blogs/austin/rsscomments.aspx?PostID=80</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://winserverteam.org.uk/blogs/austin/commentapi.aspx?PostID=80</wfw:comment><comments>http://winserverteam.org.uk/blogs/austin/archive/2007/11/02/burn-cd-s-and-dvds-with-powershell.aspx#comments</comments><description>&lt;p&gt;Included with Microsoft Vista is a new API for scripting against optical drives; the Image Mastering API version 2 or IMAPI2. This makes it possible to retrieve information from optical&amp;nbsp;storage media&amp;nbsp;like CDs and DVDs and write to them.&lt;/p&gt;
&lt;p&gt;The story around the IMAPI and what you can do with it can be found on &lt;a href="http://msdn2.microsoft.com/en-us/library/aa366450.aspx" target="_blank"&gt;msdn&lt;/a&gt; but what brought it to my attention was the &lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/imapi/imapi2-2.mspx#EYH" target="_blank"&gt;Scriptcenter&lt;/a&gt; newsletter this week where a VB sample of how to burn CDs/DVDs using the Image Mastering API was described. Yep, if we can do it with VB there&amp;#39;s got to be a PoSHer way to do the same thing so I gave it a go and over&amp;nbsp;a couple of hours&amp;nbsp;managed to get my version to work.&lt;/p&gt;
&lt;p&gt;Who needs ISO burning tools anymore ay? Roll your own!&lt;/p&gt;
&lt;p&gt;My modification of the&amp;nbsp;script accepts one argument which is the path to the ISO file and it barfs if a wrong path is given.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The assumption is that the CD/DVD writer is first optical drive on the system (If it&amp;#39;s not, change the msftdiscMaster2&amp;nbsp;index&amp;nbsp;used&amp;nbsp;in the msftdiscrecorder2&amp;nbsp;initializedrecorder method&amp;nbsp;). &lt;/p&gt;
&lt;p&gt;Minor error checking has been thrown in to ensure a valid path to an ISO file is provided and that the disc is blank.&lt;/p&gt;
&lt;p&gt;---------------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;param(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string]$path = $( throw &amp;quot;Please Specify path to an ISO file&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&lt;em&gt;&lt;font color="#00ff00"&gt;# Set binary file type&lt;/font&gt;&lt;/em&gt;&lt;br /&gt;Set-Variable -name adFileTypeBinary -value 1 -option Constant 
&lt;p&gt;&lt;font color="#00ff00"&gt;&lt;em&gt;# Test if path exists else fail&lt;/em&gt;&lt;/font&gt;&lt;br /&gt;if (Test-Path -path $path -isValid)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $isoFile = $path 
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;&lt;font color="#00ff00"&gt;# Create disc master to burn to optical drives&lt;/font&gt;&lt;/em&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $obm = New-Object -comobject &amp;quot;imapi2.msftdiscMaster2&amp;quot; 
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;em&gt; # Create a DiscRecorder object for the specified burning device&lt;br /&gt;&lt;/em&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $obr = New-Object -comobject &amp;quot;imapi2.msftdiscrecorder2&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $obr.initializediscrecorder( $obm.item(0) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dataWriter = New-Object -comobject &amp;quot;IMAPI2.MsftDiscFormat2Data&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dataWriter.Recorder = $obr&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dataWriter.ClientName = &amp;quot;ISOTest1&amp;quot; 
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;&lt;font color="#00ff00"&gt;# Write stream to disc using the specified recorder&lt;/font&gt;&lt;/em&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host &amp;quot;Writing to disc...&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $objStream = New-Object -comobject &amp;quot;ADODB.Stream&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $objStream.open()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $objStream.type = $adFileTypeBinary&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $objStream.LoadFromFile( &amp;quot;$isoFile&amp;quot; ) 
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;&lt;font color="#00ff00"&gt;# Check disk is blank else fail&lt;/font&gt;&lt;/em&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $addr = $dataWriter.NextWritableAddress&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $addr = &amp;quot;0&amp;quot;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dataWriter.Write( $objStream )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host &amp;quot;Done&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host &amp;quot;Cannot write to disk&amp;quot; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;p&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host &amp;quot;A valid ISO file was not found&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;p&gt;--------------------------------------------------------------------------------------- 
&lt;p&gt;The Scriptcenter site shows other examples in VB and they can all be converted to Powershell with very little effort. 
&lt;p&gt;Binaries for for versions of IMAPIv2 for other platforms can be obtained here: 
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3db5f726f1-4ace-455d-bad7-abc4dd2f147b%26DisplayLang%3den"&gt;Image Mastering API v2.0 for Windows XP&lt;/a&gt; 
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dfe4770f5-91fa-4390-920a-f4d45c67923c%26DisplayLang%3den"&gt;Image Mastering API v2.0 for Windows Sever 2003&lt;/a&gt; 
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=3&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d5b91629c-3150-47c0-b4ee-de18dd30a61c%26DisplayLang%3den"&gt;Image Mastering API v2.0 for Windows XP x64 Edition&lt;/a&gt; 
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=4&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d316584fa-a268-4208-9050-137f59de89e9%26DisplayLang%3den"&gt;Image Mastering API v2.0 for Windows Server 2003 x64 Edition&lt;/a&gt;&lt;/p&gt;&lt;img src="http://winserverteam.org.uk/aggbug.aspx?PostID=80" width="1" height="1"&gt;</description><category domain="http://winserverteam.org.uk/blogs/austin/archive/tags/Powershell/default.aspx">Powershell</category><category domain="http://winserverteam.org.uk/blogs/austin/archive/tags/Windows/default.aspx">Windows</category><category domain="http://winserverteam.org.uk/blogs/austin/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://winserverteam.org.uk/blogs/austin/archive/tags/Fun/default.aspx">Fun</category></item></channel></rss>