title: Sql Server Script data: SMO.Scripter not working when output to file
body: <p>I get this error message when I run the Powershell script at the bottom:</p>
  
  <pre><code>Exception calling "EnumScript" with "1" argument(s): "Script failed for Table 'dbo.Product'. "
  At :line:48 char:35
  + foreach ($s in $scripter.EnumScript &lt;&lt;&lt;&lt; ($tbl)) { write-host $s }
  </code></pre>
  
  <p>However, when I comment out the output_file line </p>
  
  <pre><code>#$output_file="C:\Product.sql"
  </code></pre>
  
  <p>(which won't set the Scripter options to write to file), it works fine and outputs the INSERT statments to the console.</p>
  
  <hr>
  
  <p>Here's the failing script, is there something I'm missing?</p>
  
  <pre><code># Script INSERTs for given table
  param 
  (
    [string] $server,
    [string] $database,
    [string] $schema,
    [string] $table,
    [string] $output_file
  )
  
  $server="devdidb02"
  $database="EPCTrunk_EPC"
  $schema="dbo"
  $table="Product"
  $output_file="C:\Product.sql"
  
  [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
  
  $srv = New-Object "Microsoft.SqlServer.Management.SMO.Server" $server
  $db = New-Object ("Microsoft.SqlServer.Management.SMO.Database")
  $tbl = New-Object ("Microsoft.SqlServer.Management.SMO.Table")
  $scripter = New-Object ("Microsoft.SqlServer.Management.SMO.Scripter") ($server)
  
  # Get the database and table objects
  $db = $srv.Databases[$database]
  $tbl = $db.tables | Where-object {$_.schema -eq $schema-and$_.name -eq $table} 
  
  # Set scripter options to ensure only data is scripted
  $scripter.Options.ScriptSchema = $false;
  $scripter.Options.ScriptData = $true;
  
  #Exclude GOs after every line
  $scripter.Options.NoCommandTerminator = $true;
  
  if ($output_file -gt "") 
  {
    $scripter.Options.FileName = $output_file
    $scripter.Options.ToFileOnly = $true
  }
  
  # Output the script
  foreach ($s in $scripter.EnumScript($tbl)) { write-host $s }
  </code></pre>