none
PowerShell com caracter especial ( / ) RRS feed

  • Pergunta

  • Pessoal

              Estou gerando um script de backup dos job do SQL Server, via powershell só que na parte de arquivo, deu alguns problemas na questão de utilizar o comando de replace do powershell onde verificando que não estou conseguido fazer o replace do caracter \, qual seria a maneira correta de utilizar o replace para este caracter via powershell ?

             Onde no nome do arquivo está assim : Pasta de backup (c:\bd_sqlserver\backup\bkp_job\)   Nome do Job (ProcessoTeste_ter\qua\qui.sql)

    Exemplo : (ProcessoTeste_ter\qua\qui.sql) deveria fica assim (ProcessoTeste_ter_x_qua_x_qui.sql)

    # Nome da sua máquina
    $ServerNameList = "notenew\SQL_2016"
    
    # Diretório para salvar os scripts
    $OutputFolder = "C:\bd_sqlserver\backup\bkp_job\"
    
    $DoesFolderExist = Test-Path $OutputFolder
    $null = if (!$DoesFolderExist){MKDIR "$OutputFolder"}
    
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
    
    $objSQLConnection = New-Object System.Data.SqlClient.SqlConnection
    
    foreach ($ServerName in $ServerNameList)
    {
    
        Try
        {
            $objSQLConnection.ConnectionString = "Server=$ServerName;Integrated Security=SSPI;"
            Write-Host "Tentando se conectar na instância do servidor $ServerName..." -NoNewline
            $objSQLConnection.Open() | Out-Null
            Write-Host "Conectado."
            $objSQLConnection.Close()
        }
        Catch
        {
            Write-Host -BackgroundColor Red -ForegroundColor White "Falha"
            $errText = $Error[0].ToString()
            if ($errText.Contains("network-related"))
                {Write-Host "Erro de conexão à instância. Por favor, verifique o nome do servidor digitado, porta ou firewall."}
    
            Write-Host $errText
            
            continue
    
        }
    
        $srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerName
        
        # Arquivo único com todos os jobs
        # $srv.JobServer.Jobs | foreach {$_.Script() + "GO`r`n"} | out-file "$OutputFolder\jobs.sql"
    
        # Um arquivo por job
        $srv.JobServer.Jobs | foreach-object -process {out-file -filepath $("$OutputFolder\" + $($_.Name.replace('\\','_x1_').replace('\','_x2_').replace('[','_x3_').replace(']','_x4_').replace('.','_x5_') ) + ".sql") -inputobject $_.Script() }
    
    }


    • Editado neibala quinta-feira, 22 de agosto de 2019 18:14 Faltou o exemplo para a dúvida ficar mais clara.
    quinta-feira, 22 de agosto de 2019 16:24

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 22 de agosto de 2019 16:54
  •     José Diz / Pessoal

        Mais uma vez obrigado pela atenção, mais com não tinha postado o exemplo então está possibilidade que você enviou eu cheguei a testar dentre outras, onde deu a impressão de ser algo de caracter especial, só que até o momento não consegui identificar claramente, caso tenha outra dica agradeço.

        E vendo uma das possibilidades, estou ajustando aqui, só que estou com uma dúvida maior na 3o. opção, caso alguém saiba com ajustar, agradeço ?

    1)
    $OutputFolder = "C:\bd_sqlserver\backup\bkp_job\"
    $OutputFolder = "C:\bd_sqlserver\backup\bkp_job"
    
    2)
      # $srv.JobServer.Jobs | foreach {$_.Script() + "GO`r`n"} | out-file "$OutputFolder\jobs.sql"
     # $srv.JobServer.Jobs | foreach {$_.Script() + "GO`r`n"} | out-file = Join-Path $OutputFolder 'jobs.sql'
    
    3)
     $srv.JobServer.Jobs | foreach-object -process {out-file -filepath $("$OutputFolder\" + $(( $_.Name.replace('\\','').replace('[','{').replace(']','}') ) + ".sql") -inputobject $_.Script() }
     $srv.JobServer.Jobs | foreach-object -process {out-file = Join-Path $OutputFolder $($_.Name.replace('\\','_x1_').replace('\','_x2_').replace('[','_x3_').replace(']','_x4_').replace('.','_x5_')  $('.sql')) -inputobject $_.Script() }
    

    • Editado neibala quinta-feira, 22 de agosto de 2019 19:40 Melhoria na pergunta.
    quinta-feira, 22 de agosto de 2019 18:17
  • Deleted
    • Marcado como Resposta neibala terça-feira, 27 de agosto de 2019 14:51
    domingo, 25 de agosto de 2019 13:52