2017-12-21 19 views
0

PowerShellを使用してbcpのデータを出力したいスクリプトがあります。 bcp複数のコマンドをキックオフし、テキストファイルからテーブル名と2.フィールド名を読み取って、bcpコマンド文字列を入力する必要があります。テキストファイルから2つの変数を読み込んでループする

現在、これは機能しませんが、2つの変数を組み込む方法がわかりません。

 
table: table1 
table: table2 
field: field1 
field: field2 
# Log file time stamp: 
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
# Log file name: 
$LogFile = "C:\Administration\Logs\BCPEXPORTLOG_" + $LogTime + ".log" 

$database = "database" 
$schema = "dbo" 
$table = "TableName" 
$tablename = Get-Content 'C:\Administration\Scheduled Tasks\CUBTableList.txt' | 
      ? { $_ -match '^\s*table:\s*' } | 
      select -First 1 | 
      % { ($_ -split ':\s*', 2)[1] } 
$fieldname = Get-Content 'C:\Administration\Scheduled Tasks\CUBTableList.txt' | 
      ? { $_ -match '^\s*field:\s*' } | 
      select -First 1 | 
      % { ($_ -split ':\s*', 2)[1] } 

foreach ($line in Get-Content 'C:\Administration\Scheduled Tasks\CUBTableList.txt') { 
    $bcp_command = "bcp 'SELECT * FROM $database.$schema.$tablename WHERE ($fieldname <= DATEADD(ms, -3, GETDATE()))' QUERYOUT 'D:\BCPOut\$database`_$tablename.txt' -c -U 'user' -P 'password'" 
    Tee-Object -FilePath $LogFile -InputObject $bcp_command -Append 
    $bcp_results = Invoke-Expression $bcp_command 
    Tee-Object -FilePath $LogFile -InputObject $bcp_results -Append 
} 

答えて

0

私は危険なスクリプトを修正しました:

テキストファイルは次のようになります。

代わりにimport-csvを使用しました。

# Log file time stamp: 
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
# Log file name: 
$LogFile = "C:\Administration\Logs\BCPEXPORTLOG_"+$LogTime+".log" 

$database = "database" 
$schema = "dbo" 
$table = "TableName" 

Import-CSV 'C:\Administration\Scheduled Tasks\CUBList.csv' | ForEach{ 

     $bcp_command = "bcp 'SELECT * FROM $database.$schema." + $_.tablename + " WHERE (" + $_.fieldname + " <= DATEADD(ms, -3, GETDATE()))' QUERYOUT 'D:\BCPOut\$database`_" + $_.tablename + ".txt' -c -U 'user' -P 'password'" 
     Tee-Object -FilePath $LogFile -InputObject $bcp_command -Append 
     $bcp_results = Invoke-Expression $bcp_command 
     Tee-Object -FilePath $LogFile -InputObject $bcp_results -Append 
    } 
0

このコードを試してみてください。

$LogFile = "c:\temp\BCPEXPORTLOG_{0:MM-dd-yyyy_hh-mm-ss}.log" -f (Get-Date) 
$database = "database" 
$schema = "dbo" 

#split with 'table:' 
$Split1=(Get-Content c:\temp\CUBTableList.txt) -split 'table:' 

#split fields and take only tablename <>'' and table have field 
$Elements=$Split1 | %{ 
$Split2=$_ -split 'field:' 
$table=$Split2[0]; 
[pscustomobject]@{TableName=$Split2[0].Trim(); Fields=$Split2[1..$($Split2.Length)] | %{$_.Trim()}} | where {$_.TableName -ne '' -and $_.Fields -ne $null} 
} 

[email protected]() 

#build bcp commands 
$Elements | %{ 

    $TableName=$_.TableName 

    $_.Fields | %{ 

    $bcp_command+="bcp 'SELECT * FROM {0}.{1}.{2} WHERE {3} <= DATEADD(ms, -3, GETDATE())' QUERYOUT 'D:\BCPOut\{0}_{2}_{3}.txt' -c -U 'user' -P 'password'" -f $database, $schema, $TableName, $_ 

    } 
} 

#run commands 
$bcp_command | %{ 

    $_ | out-file $LogFile -Append 

    try 
    { 
     $result=Invoke-Expression $_ 
    } 
    catch 
    { 
     $result=$_.Exception.Message 
    } 
    finally 
    { 
     $result | Out-File $LogFile -Append 
    } 


} 
関連する問題