Почему рабочий каталог меняется при выполнении 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> _
Либо это, либо преодолеть проблему путем факторинга изменения каталога в ваших командах.