Powershell 脚本在 SQL Server 代理作业中运行时的行为有所不同

问题描述 投票:0回答:1

操作系统: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 代替感叹号,但它的行为是相同的。

powershell sql-agent-job
1个回答
0
投票

尝试更换:

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"
© www.soinside.com 2019 - 2024. All rights reserved.