2011-02-04 2 views

答えて

10

システムDSNの情報は、HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INIレジストリキーの下に格納されています。そのキーを.regファイルにエクスポートして別のマシンにインポートすることができます。

更新:

プログラムで行うこともできます。ここではいくつかの例は以下のとおりです。

http://www.codeproject.com/KB/database/DSNAdmin.aspx

http://support.microsoft.com/kb/110507

http://blogs.technet.com/b/heyscriptingguy/archive/2004/11/10/can-i-create-and-delete-a-dsn-using-a-script.aspx

+0

お返事ありがとうございました! – Zaffiro

+0

これは、エクスポートするサーバーのバージョンによって異なりますか? Windows 2008サーバーにエクスポートするとどうなりますか? –

+1

@KyleJohnson私はこれがWindows 2008でもうまくいくと思いますが、現時点でこれを確認するためのバージョンはありません。私はそれがまったく役に立ったら64ビットWindows 7の下でこれを確認しました。 – Garett

2

システムDSNはHKLM\Software\ODBC\ODBC.INIノード の下にWindowsレジストリに格納されています。したがって、このノードを* .regファイルにエクスポートし、このregファイルをターゲットマシンで実行すると動作します。

唯一のことは、このREGファイルには、多分、コンピュータ固有の、例えば c:\WINNT\System32\bla-bla-bla.dllは、ターゲットマシン上でWINDOWSのように呼び出すことができWINNTフォルダを含み、いくつかのファイルパスが含まれます。したがって、* .regファイル内のすべてのパスが最終的にインポートされるターゲットマシンに対して正しいことを確認するのに少し時間を費やす必要があります。

1

あなたは、彼らがユーザーDSN /システムDSNある場合に応じて、そこに登録を見つけることができない場合は、それらのことができる非常になります

[HKEY_USERS \ "ユーザーSID(これを検索しないでください。 の番号になります)\ Software \ ODBC \ ODBC.INI]

6

は、私はちょうどあなたが32ビットのオペレーティングシステム上にある32ビットODBCソース

regedit /e c:\backup\odbc.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI" 

用と64ビットのソースの場合、または非常に単純なバットスクリプトを使って自分自身をこれを行ってきました:

regedit /e c:\backup\odbc.reg "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI" 

これはすべてのDSNをバックアップしますが、必要なDNSを指定できます。

+0

Windowsサーバーで64ビットの場合は、 "HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBC.INI" – Darren

2

私は、あるコンピュータから別のコンピュータにODBC接続をコピーするためのいくつかのPowerShellの機能を書いた、彼らは掲載(および更新保持)している時:

http://powershell.com/cs/media/p/32510.aspx

# Usage: 
# $srcConfig = Get-OdbcConfig srcComputerName 
# Import-OdbcConfig trgComputerName $scrConfig 
# Only returns data when setting values 

function Get-OdbcConfig { 
param($srcName) 
    if (Test-Connection $srcName -Count 1 -Quiet) { 
     # cycle through the odbc and odbc32 keys 
     $keys = "SOFTWARE\ODBC\ODBC.INI", "SOFTWARE\Wow6432Node\ODBC\ODBC.INI" 
     foreach ($key in $keys){ 
      # open remote registry 
      $type = [Microsoft.Win32.RegistryHive]::LocalMachine 
      $srcReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $srcName) 
      $OdbcKey = $srcReg.OpenSubKey($key) 
      # red through each key 
      foreach ($oDrvr in $OdbcKey.GetSubKeyNames()){ 
       # form the key path 
       $sKey = $key + "\" + $oDrvr 
       $oDrvrKey = $srcReg.OpenSubKey($sKey) 
       # cycle through each value, capture the key path, name, value and type 
       foreach ($oDrvrVal in $oDrvrKey.GetValueNames()) { 
         $regObj = New-Object psobject -Property @{ 
         Path = $sKey 
         Name = $oDrvrVal 
         Value = $oDrvrKey.GetValue($oDrvrVal) 
         Type = $oDrvrKey.GetValueKind($oDrvrVal) 
        } 
       # dump each to the console 
       $regObj 
       } 
      } 
     } 
    } 
    # can't ping 
    else { Write-Host "$srcName offline" } 
} 

function Import-OdbcConfig { 
param($trgName, $srcConfig) 
    if (Test-Connection $trgName -Count 1 -Quiet) { 
     # open remote registry 
     $type = [Microsoft.Win32.RegistryHive]::LocalMachine 
     $trgReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $trgName) 
     # sort out the key paths and cycle through each 
     $paths = $srcConfig | select -Unique Path 
     foreach ($key in $paths){ 
      # check for the key and create it if it's not there 
      if (! $trgReg.OpenSubKey($key.Path)) { $writeKey = $trgReg.CreateSubKey($key.Path) } 
      # open the path for writing ($true) 
      $trgKey = $trgReg.OpenSubKey($key.Path, $true) 
      # cycle through each value, check to see if it exists, create it if it doesn't 
      foreach ($oDrvr in $srcConfig | where { $_.Path -eq $key.Path }) { 
       if (! $trgKey.GetValue($oDrvr.Name)) { 
        $oType = $oDrvr.Type 
        $writeValue = $trgKey.SetValue($oDrvr.Name, $oDrvr.Value, [Microsoft.Win32.RegistryValueKind]::$oType ) 
        $objObj = new-object psobject -Property @{ 
         Path = $oDrvr.Path 
         Name = $oDrvr.Name 
         Value = $trgKey.GetValue($oDrvr.Name) 
         Type = $trgKey.GetValueKind($oDrvr.Name) 
        } 
       } 
      $objObj 
      } 
     } 
    } 
    # can't ping 
    else { Write-Host "$srcName offline" } 
} 

一緒に、これらの機能を使用して、あなたはすべてをコピーすることができます1つのコンピュータODBC接続を別のコンピュータに接続する:

$ srcConfig = Get-OdbcConfig srcComputerName
インポート-OdbcConfig trgComputerName $ scrConfig

それがパス上にフィルタリングすることでのみ、お好みのODBC接続を含めることが可能です:

Import-OdbcConfig trgComputerName ($scrKeys | where { $_.Path -eq "SOFTWARE\ODBC\ODBC.INI\GoodDatabase" }) 

それとも、好きではないODBC接続をフィルタリング:

Import-OdbcConfig trgComputerName ($scrKeys | where { $_.Path -ne "SOFTWARE\ODBC\ODBC.INI\DatabaseIHate" }) 

インポートODBCConfigにはデータのみを返します値を設定するときやターゲットにpingできないときは、何も作成しないと何も言わないでしょう。

関連する問題