2014-12-03 22 views
10

我正在嘗試搜索數據庫中是否存在particualr機器名稱,如果有,我們將用新機器名稱替換。爲什麼在執行Invoke-sqlcmd時工作目錄正在改變?

我們使用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:\,無法創建日誌文件並失敗。

+0

該代碼看起來不完整。你在什麼時候寫日誌? – arco444 2014-12-03 13:54:59

+0

@ arco444更新了代碼片段 – Samselvaprabu 2014-12-03 14:00:46

+0

因此,它在嘗試寫入日誌時失敗,但您並未在實際發生的地方包含'LogWrite'函數。當然這是腳本中最相關的部分? – arco444 2014-12-03 14:22:37

回答

9

作爲啓動時運行代碼的Add-pssnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue部分的一部分,會出現此問題。我不知道它爲什麼這樣做,但我知道當我在運行MS SQL 2012的網絡中的計算機上運行類似命令(Import-Module 'sqlps' -DisableNameChecking)時,它將文件系統位置從任何位置更改爲SQLSERVER:>位置 - 我認爲這是因爲它期望您開始在SQL Server實例中使用命令。

要解決此問題,可以執行Push-LocationPop-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> _ 

要麼通過考慮命令中目錄的變化來解決問題。

相關問題