Requisito simples: exclua arquivos no caminho remoto com mais de 20 dias.
PS C:\Users\Administrator> Get-ChildItem `
-Path \\FileServer\SQLBackups\SQLServer\ `
-File -Recurse -Force |
Where-Object {
($_.LastWriteTime -lt (Get-Date).AddDays(-20))
} | Remove-Item
O comando acima é bem-sucedido (backticks de vaidade e quebras de linha adicionados para legibilidade).
O trabalho relevante do SQL 2016 (backticks e quebras de linha não adicionados, mas o texto do comando é o mesmo)
@subsystem=N'PowerShell',
@command=N'Get-ChildItem -Path \\FileServer\SQLBackups\SQLServer\ -File -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-20))}|Remove-Item',
@proxy_name=N'XPProxy'
As informações de erro retornadas pelo PowerShell são:
'Não foi encontrado um parâmetro que corresponda ao nome do parâmetro 'Arquivo'.
Sem problemas de permissões (consulte proxy_name); Versão do SQL Powershell:
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
SQL @@VERSION
:
Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 28 de outubro de 2016 18:17:30 Copyright (c) Microsoft Corporation Standard Edition (64 bits) no Windows Server 2012 R2 Standard 6.3 (Build 9600: ) (Hipervisor)
Abaixo está a lista de parâmetros real da Get-ChildItem
função . Por que o SQL não pode usar o -File
parâmetro?
Get-ChildItem
[[-Path] <String[]>]
[[-Filter] <String>]
[-Attributes {ReadOnly | Hidden | System | Directory | Archive | Device | Normal | Temporary | SparseFile | ReparsePoint | Compressed | Offline | NotContentIndexed | Encrypted | IntegrityStream | NoScrubData}]
[-Depth <UInt32>]
[-Directory]
[-Exclude <String[]>]
[-File]
[-Force]
[-Hidden]
[-Include <String[]>]
[-Name]
[-ReadOnly]
[-Recurse]
[-System]
[-UseTransaction]
[<CommonParameters>]
https://www.sqlservercentral.com/forums/topic/powershell-for-network-path http://www.midnightdba.com/Jen/2013/05/quick-tip-navigating-to-a-unc-within -sqlps/
Adicionar a
cd C:
linha à minha tarefa do Powershell no SQL Job permitiu que as referências UNC resolvessem o diretório de arquivos do servidor remoto.Para citar um homem sábio: "O SQL Server Agent se integra ao powershell de maneiras muito pouco intuitivas às vezes"
Obrigado pela ajuda, Pedro.