2014-12-03 26 views
10

Ben partialr makine adı veritabanında olup olmadığını aramak için çalışıyorum ve eğer öyleyse biz yeni makine adı ile değiştiriyoruz. Biz PowerShellNeden Invoke-sqlcmd yürütülürken çalışma dizini değişiyor?

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] 
     } 

Her şeyi kullanıyor

çalışıyor. Ancak Invoke-sqlcmd çalıştırıldığında, sürücü harfi SQLServer'a değişiyor: \ bu şaşırtıcı. Ben Windows 2012 R2 makineyi bu çalıştıran ve SQL Server karşı bu yürütme am

çalışma dizini, ne zaman geçerli komut yolundaki bir günlük dosyası yazma vardır bizim komut başarısız değişiyor zaman sorunudur 2012.

komut dosyası yolu, SQLserver: \ dizinine dönüşür ve günlük dosyası oluşturamaz ve başarısız olur.

+0

Bu kod eksiksiz görünmüyor. Yazma günlüğüne hangi noktada yazıyorsunuz? – arco444

+0

@ arco444 Snippet'i güncelleştirdikten sonra – Samselvaprabu

+0

Günlüğe yazmayı denediğinde başarısız oluyor, ancak aslında gerçekleştiği yerde 'LogWrite 'işlevini kullanmadınız. Elbette bu, senaryonun en alakalı kısmı mı? – arco444

cevap

9

Bu sorun, kodunuzun başında Add-pssnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue bölümünü çalıştırmanın bir parçası olarak oluşur. Bunu neden yaptığından emin değilim ama MS SQL 2012 çalıştıran ağımızdaki bilgisayarlarda benzer bir komut (Import-Module 'sqlps' -DisableNameChecking) çalıştırdığımda, dosya sistemi konumunu ne olursa olsun SQLSERVER:> konumuna değiştirir - bunun olduğunu varsayıyorum SQL Server örneğindeki komutları kullanmaya başlamanızı bekler.

Bu sorunun üstesinden gelmek için, özgün konumunuza geri dönmek üzere Push-Location ve Pop-Location komutunu yapabilirsiniz;

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> _ 

Komutlarınızdaki dizinde yapılan değişikliği hesaba katarak sorunu gidermek ya da aşmak.

İlgili konular