操作系统:Windows Server 2019 标准版
SQL:Microsoft SQL Server 2017 标准 CU28
PS版本:5.1.17763.2268
我制作了一个简单的脚本来在恢复数据库之前检查共享是否可访问。如果共享不可访问,它将循环直到共享可访问。 脚本是SQL Agent作业的第一步,设置为PowerShell类型。
while(!(Test-Path \\192.168.1.92\Share\))
{
Write-EventLog -LogName "Application" -Source "DB_Refresh" -EventID 1001 -EntryType Information -Message "Backup share is not accessible!" -Category 1
sleep 30
}
Write-EventLog -LogName "Application" -Source "DB_Refresh" -EventID 1001 -EntryType Information -Message "Backup share is accessible!" -Category 1
当我在 PS ISE 中运行脚本时,它按预期工作。当我在 SQL 代理作业步骤中运行它时,否定的工作方式正好相反。当共享可访问时,它将循环,当不可访问时,它将不会循环。
有什么想法为什么会这样吗?我尝试过用 -Not 代替感叹号,但它的行为是相同的。
尝试更换:
while(!(Test-Path \\192.168.1.92\Share\))
与:
New-PSDrive -Name "P" -PSProvider FileSystem -Root "\\192.168.1.92\Share"
while(!(Test-Path P:\))
我不确定它是否可以按照您的意愿测试共享是否可访问,但此解决方案适用于访问网络共享上的文件。例如:
虽然这不起作用:
$Content = Get-Content -Path "\\192.168.1.92\Share\file.txt"
这很好用:
New-PSDrive -Name "P" -PSProvider FileSystem -Root "\\192.168.1.92\Share"
$Content = Get-Content -Path "P:\file.txt"