Экспорт системных уведомлений ODBC с компьютера с Windows 2003? - PullRequest
9 голосов
/ 04 февраля 2011

Есть ли способ экспортировать все системные DSN ODBC с компьютера с Windows 2003?

Ответы [ 5 ]

10 голосов
/ 04 февраля 2011

Информация о DSN системы хранится в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI. Вы можете экспортировать этот ключ в файл .reg и импортировать его на другой компьютер.

UPDATE:

Вы также можете сделать это программно. Вот несколько примеров:

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

7 голосов
/ 23 августа 2013

Я только что сделал это сам с очень простым сценарием bat для 32-битных источников ODBC

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

и для 64-битных источников или если вы работаете в 32-битной операционной системе:

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

Это резервное копирование всех DSN, однако вы можете указать DNS, который вы хотите.

2 голосов
/ 28 марта 2014

Я написал несколько функций Powershell для копирования соединений ODBC с одного компьютера на другой, они размещены (и постоянно обновляются) по адресу:

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" }  
} 

Используя эти функции вместе, вы можете скопировать все соединения ODBC одного компьютера на другой:

$ srcConfig = Get-OdbcConfig srcComputerName
Import-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" } )

Import-OdbcConfig возвращает данные только при установке значений или не может пинговать целевой объект, если создать нечего, он ничего не скажет.

2 голосов
/ 04 февраля 2011

Системные DSN хранятся в реестре Windows под узлом HKLM\Software\ODBC\ODBC.INI. Поэтому, если вы экспортируете этот узел в файл * .reg и запустите этот reg-файл на целевом компьютере, он должен работать.

Единственное, что нужноэтот reg-файл будет содержать несколько путей к файлам, которые могут зависеть от компьютера, например, c:\WINNT\System32\bla-bla-bla.dll включает папку WINNT, которая на целевой машине может называться как WINDOWS.Поэтому вам нужно потратить немного времени, чтобы убедиться, что все пути в файле * .reg являются правильными для целевой машины, куда вы, наконец, импортировали бы.

1 голос
/ 26 июня 2012

Если вы не можете найти там регистрации, в зависимости от того, являются ли они DSN пользователя / системного DSN, они могут быть:

[HKEY_USERS \ "SID пользователя (не смотритедля этого это будет длинное число) \ Software \ ODBC \ ODBC.INI]

...