Почему рабочий каталог меняется при выполнении Invoke-sqlcmd?

Я пытаюсь выполнить поиск, есть ли имя машины partialr в базе данных, и если мы заменим его новым именем.

Мы используем powershell

 Add-pssnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue
    Add-pssnapin sqlservercmdletsnapin100 -ErrorAction SilentlyContinue

    $SelectQuery = "SELECT [$columnName] FROM [$DatabaseName].[dbo].[$TableName] Where [$columnName] is not null;"

    try {
          $Qresult= Invoke-sqlcmd -query $SelectQuery -Database $DatabaseName -ServerInstance $srvInstance -Verbose
          $Qresult = $Qresult| % { $_.$columnName+"`n" 

           #check whether the Machine Name is found if the column value is processed in URL format
            $IsOldFoundFromURL=TestOldMachineFromURL $Qresult $OldMachineName

            #check whether the Machine Name is found if the column value is processed in Connection string format
            $IsOldFoundFromConn=TestOldMachineFromconnstring $Qresult $OldMachineName

            If ( $IsOldFoundFromURL -or  $IsOldFoundFromConn ) {

                    LogWrite "Columns Name before changing: $columnName "
                    LogWrite "$Qresult"
            }
            Else {
                    LogWrite "OldMachine name is not found in DB"
                    Return
            }
     }
     catch {
            Write-error "Error occured when executing sql $SelectQuery"
            LogWrite $Error[0]
        }

Все прекрасно работает. Но при выполнении Invoke-sqlcmd буква диска меняется на SQLServer: \, что удивительно.

Я запускаю это на машине Windows 2012 R2 и выполняю это на сервере sQL 2012.

Проблема заключается в том, что рабочий каталог меняет наш script сбой, поскольку мы выписываем файл журнала в текущем пути script, когда путь script изменяется на SQL-сервер: \, не удается создать файл журнала и не удается.

Ответ 1

Эта проблема возникает как часть запуска Add-pssnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue вашего кода в начале. Я не уверен, почему он это делает, но я знаю, что когда я запускаю аналогичную команду (Import-Module 'sqlps' -DisableNameChecking) на компьютерах нашей сети с MS SQL 2012, она меняет местоположение файловой системы из любого места в местоположение SQLSERVER:> - я предположим, что это связано с тем, что он ожидает, что вы начнете использовать команды в экземпляре SQL Server.

Чтобы преодолеть эту проблему, вы можете сделать команду Push-Location и Pop-Location, чтобы вернуться в исходное местоположение, например:

C:\Users\foo.bar> Push-Location
C:\Users\foo.bar> Add-pssnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue
SQLSERVER:\> Add-pssnapin sqlservercmdletsnapin100 -ErrorAction SilentlyContinue
SQLSERVER:\> Pop-Location
C:\Users\foo.bar> _

Либо это, либо преодолеть проблему путем факторинга изменения каталога в ваших командах.