Perché il metodo Folder.CopyHere NET non consente la soppressione della window di dialogo per i file .ZIP quando viene eseguito in un process di SQL Server Agent PowerShell?

Sto usando PowerShell in un process di agente di SQL Server per automatizzare l'estrazione del contenuto del file .ZIP in una directory.

Sulla base della risposta più votata su questa domanda: come eseguire la chiusura / decomprimere i file in Powershell?

  • Come get un elenco di tutti gli elenchi di distribuzione ei loro membri in Exchange 2007?
  • C'è un modo per mostrare un livello di crittografia della session RDP dalla row di command / Powershell?
  • Powershell 2.0 L'aggiornamento di Windows Server 2008 SP2 non si applica al sistema
  • Exchange PowerShell in un'operazione pianificata funziona per sempre
  • Riconfigurare automaticamente l'ascoltatore WinRM HTTPS con il nuovo certificato?
  • VMware ESX Audit
  • Sto usando questo codice:

    $dir_source = "\\myserver\myshare\" $dir_destination = "\\myserver2\myshare2\" $file_source = Get-ChildItem -Path (Join-Path -Path $dir_source -ChildPath "test.zip") $shell_app = New-Object -com shell.application $zip_file = $shell_app.namespace($file_source.FullName) $destination = $shell_app.namespace($dir_destination) $destination.Copyhere($zip_file.items(),20) 

    Il parametro facoltativo vOptions del metodo CopyHere è 20, che specifica "Non visualizzare una window di dialogo di avanzamento". (4) e "Rispondi con" Sì a tutti "per qualsiasi window di dialogo visualizzata." (16).

    Questo parametro funziona come previsto in un editor di script PowerShell (sto utilizzando PowerGUI Script Editor). Posso eseguire lo script e eseguirlo di nuovo (scenario di sovrascrittura), e lo script completato senza errori e senza windows di dialogo. Tuttavia, l'esecuzione dello stesso codice in un process di SQL Server Agent PowerShell provoca un process che si blocca quando il file esiste già nel database di destinazione.

    Passi da riprodurre:

     - Instantiate code in a SQL Server 2008 SQL Server Agent Job step - Start the SQL job - Result: SQL job completes, unzipped file "test.csv" appears in the $dir_destination folder - Start the SQL job - Result: Job executes indefinitely. - Stop the SQL job - Delete the "test.csv" from the $dir_destination folder - Start the SQL job - Result: SQL job completes, unzipped file "test.csv" appears in the $dir_destination folder 

    Perché il parametro vOption non funziona per il process SQL?

    Walter Wang, di Microsoft Online Community Support afferma :

    … nota che each cartella shell è supportta da un'estensione dei nomi di shell (NSE per brevi). Ogni NSE sceglierà di avere un proprio meccanismo per copiare / spostare / cancellare i dati (file / cartella per un normale path del file system).

    La documentazione su cui si fa riferimento sul metodo CopyHere si applica solo al path del file system normale. È per questo che si utilizza l'opzione 4 per distriggersre la window di dialogo di avanzamento non funziona per una cartella zip.

    D'altra parte, l'ultima volta che ho controllato con la squadra di shell, attualmente il file zip NSE funzionalità è solo destinato ad essere utilizzato con l'interazione con gli utenti.

    In altre parole, l'accesso al file zip NSE non è ufficialmente supportto. "

  • Come possono i provider di hosting consentono la fiducia di .NET?
  • Soluzione per l'esecuzione di una DLL a 32 bit in un process a 64 bit o viceversa
  • Imansible installare .NET Framework 4.6 su Windows Server 2012 R2 Core
  • Windows Services non si avvia automaticamente dopo il riavvio?
  • Controllo della salute su .NET 4.5 installazione
  • Installare Mono ASP.NET su debian
  • 2 Solutions collect form web for “Perché il metodo Folder.CopyHere NET non consente la soppressione della window di dialogo per i file .ZIP quando viene eseguito in un process di SQL Server Agent PowerShell?”

    Mi chiedo se questo abbia qualcosa a che fare con gli interni dei passi di lavoro di Powershell in SQL Agent. Ad esempio, non è ansible eseguire l'host di scrittura nel passo del process powershell in SQL Agent come spiegato in questo post di blog: http://blogs.msdn.com/b/mwories/archive/2009/09/30/the-use-of- write-host-e-sql-server-agent-PowerShell-job-steps.aspx

    Un suggerimento– provare ad impostare un passaggio di lavoro CmdExec e call C: \ windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe con il parametro -file invece di utilizzare i passaggi del process powershell. In questo modo verrà utilizzato cmdexec invece di sqlps.

    Devi passare nella bandiera

     (16) Respond with "Yes to All" for any dialog box that is displayed. 

    Così:

     $destination.Copyhere($zip_file.items(), 16) 

    Potresti volerlo combinare con questa bandiera:

     (4) Do not display a progress dialog box. 

    Così si farebbe:

     $destination.Copyhere($zip_file.items(), 20) 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.