none
Ejecutar codigo powershell desde SQL y acceso a carpeta compartida. RRS feed

  • Pregunta

  • Buenas,

      Estimados. Tengo un script de PS, que básicamente me recorre los objetos de la BD (Tablas, SPs, Vistas, etc) y me trae el script de creación de cada uno de esos objetos. Paso siguiente debería copiar los objetos a una carpeta compartida, sin embargo esto no lo he podido lograr.

    Ahora bien, localmente si me corre desde un JOB, es decir, voy configuro el Script para que me copie esos Scripts en una unidad local del servidor y me funciona. La variable $patch es donde le digo a donde van a ir esos scripts.

    Pensaba que era un tema de permisos, pero a la carpeta compartida se le dio el permisos de lectura y escritura para todos los usuarios.

    Alguna idea de que pueda ser?

    $date_ = (date -f yyyyMMdd) $ServerName = "MyServer" #If you haven4t a default instance, you should put the name. $path = "R:\Scripts Objetos"+ "Objects_" +"$date_" [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') $serverInstance = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName $IncludeTypes = @("Tables","StoredProcedures","Views","UserDefinedFunctions", "Triggers") #object you want do backup. $ExcludeSchemas = @("sys","Information_Schema") $so = new-object ('Microsoft.SqlServer.Management.Smo.ScriptingOptions') $dbs=$serverInstance.Databases|where {$_.name -eq "MyDB"} #you can change this variable for a query for filter yours databases. foreach ($db in $dbs) { $dbname = "$db".replace("[","").replace("]","") $dbpath = "$path"+ "\"+"$dbname" + "\" if ( !(Test-Path $dbpath)) {$null=new-item -type directory -name "$dbname"-path "$path"} foreach ($Type in $IncludeTypes) { $objpath = "$dbpath" + "$Type" + "\" if ( !(Test-Path $objpath)) {$null=new-item -type directory -name "$Type"-path "$dbpath"} foreach ($objs in $db.$Type) { If ($ExcludeSchemas -notcontains $objs.Schema ) { $ObjName = "$objs".replace("[","").replace("]","") $OutFile = "$objpath" + "$ObjName" + ".sql" $objs.Script($so)+"GO" | out-File $OutFile } } } }


    Configuración del JOB:


    Jose Miguel Salas C

    lunes, 5 de marzo de 2018 21:41

Respuestas

  • Buenas,

      Buscando en la red encontré que se debe agregar esta sentencia antes de la ruta compartida:

    Microsoft.PowerShell.Core\FileSystem::

    Espera que les sea de utilidad.


    Jose Miguel Salas C

    • Marcado como respuesta JoseSalas lunes, 5 de marzo de 2018 22:42
    lunes, 5 de marzo de 2018 22:42