我正在尝试搜索数据库中是否有特定的机器名称,如果是,我们将替换为新的机器名称。
我们正在使用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 server 2012执行此操作。
问题是当工作目录更改我们的脚本失败时,因为我们在当前脚本路径中写入日志文件,当脚本路径更改为SQLserver:\时,无法创建日志文件并失败。