【发布时间】:2014-12-03 13:51:56
【问题描述】:
我正在尝试搜索数据库中是否存在特定的机器名称,如果存在,我们将替换为新的机器名称。
我们正在使用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:\ 时,无法创建日志文件并失败。
【问题讨论】:
-
该代码看起来不完整。你在什么时候写日志?
-
@arco444 更新了 sn-p
-
所以它在尝试写入日志时失败了,但你没有在实际发生的地方包含
LogWrite函数。这肯定是脚本中最相关的部分吗?
标签: powershell sql-server-2012