简单的要求:删除远程路径上超过 20 天的文件。
PS C:\Users\Administrator> Get-ChildItem `
-Path \\FileServer\SQLBackups\SQLServer\ `
-File -Recurse -Force |
Where-Object {
($_.LastWriteTime -lt (Get-Date).AddDays(-20))
} | Remove-Item
上面的命令成功(为了可读性添加了虚反引号和换行符)。
相关的SQL 2016 Job(反引号和换行符没有加,但是命令文本是一样的)
@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'
PowerShell返回的错误信息是:
'找不到与参数名称'文件'匹配的参数。
没有权限问题(参考 proxy_name);SQL Powershell 版本:
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
SQL @@VERSION
:
Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) Oct 28 2016 18:17:30 版权所有 (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 (Build 9600:) (管理程序)
下面是Get-ChildItem
函数的实际参数列表。为什么 SQL 不能使用-File
参数?
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/
在 SQL Job中将这一行添加
cd C:
到我的 Powershell 任务允许 UNC 引用来解析远程服务器文件目录。引用一位智者的话:“SQL Server 代理有时会以非常不直观的方式与 powershell 集成”
谢谢你的帮助,彼得。