Sql server Powershell脚本在SQL Server作业中未正确执行

Sql server Powershell脚本在SQL Server作业中未正确执行,sql-server,excel,powershell,import-from-excel,Sql Server,Excel,Powershell,Import From Excel,这个问题可能有不同的提问方式,但我找不到任何匹配的 我有一个运行2个powershell脚本的SQL Server作业。第一个运行良好(简单的IP堆栈查询),第二个不工作。作业的第一步是验证我正在执行作业的用户id是否具有正确的证书,因为SQL代理无法工作。我正在以CmdExe类型运行第二步,以强制SQL Server执行外部更新的PowerShell可执行文件,该文件安装了导入Excel包,而不是内部实例 完整的作业输出为: Windows IP Configuration Ethernet

这个问题可能有不同的提问方式,但我找不到任何匹配的

我有一个运行2个powershell脚本的SQL Server作业。第一个运行良好(简单的IP堆栈查询),第二个不工作。作业的第一步是验证我正在执行作业的用户id是否具有正确的证书,因为SQL代理无法工作。我正在以CmdExe类型运行第二步,以强制SQL Server执行外部更新的PowerShell可执行文件,该文件安装了导入Excel包,而不是内部实例

完整的作业输出为:

Windows IP Configuration

Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix  . :  ddd
   Link-local IPv6 Address . . . . . :  xxx
   IPv4 Address. . . . . . . . . . . :  yyy
   Subnet Mask . . . . . . . . . . . :  zzz
   Default Gateway . . . . . . . . . :  aaa

========================
 Excel access error occured: 
at <ScriptBlock>, E:\tmp\tstScripts\tst_load.ps1: line 10
Data is NOT valid.
Exiting script with level  999

正在执行的代码如下所示,并显示错误行:



$XL_FilePath = 'C:\tmp\tstdata\';

$XL_SQL_Input = 'MyExcel_Tst';

$wSep = "========================";

try{
$Excel = New-Object -ComObject Excel.Application;    <<<<<----  This is error line 

$Workbook = $Excel.Workbooks.Open($XL_FilePath + $XL_SQL_Input +'.xlsx');

$WorkSheet = $Workbook.Sheets.Item(2);

for ($i=1; $i -lt 3; $i++)
    { 
        $col = 1;
        $row = $i;
        if ($i -lt 2)
        { 
            $FCell = $WorkSheet.cells.Item($col, $row).Text;
        }else{
            $SCell = $WorkSheet.Cells.Item($col, $row).Text;
        }

    }

Write-Host $wSep;

Write-Host "The Excel sheet being worked on is" $WorkSheet.Name;

Write-Host $wSep;
write-host " First cell contains: " $FCell;
write-host " Second cell contains: " $SCell;

}
catch{

    Write-Host $wSep;
    Write-Host " Excel access error occured: ";
    Write-Host $_.ScriptStackTrace;
}


##  validation check - only check the 2nd value as it must be numeric, 1st is any character.

if ($SCell.Length-1 -match "^\d+$")
    {
        Write-Host " Valid data is present." -ForegroundColor Green; 
        $errorlevel = 0;
    }else{
        Write-Host "Data is NOT valid." -BackgroundColor RED -ForegroundColor Yellow;
        $errorlevel = 999;
    }


Write-Host "Exiting script with level " $errorlevel;

exit $errorlevel;


$XL_FilePath='C:\tmp\tstdata\';
$XL_SQL_输入='MyExcel_Tst';
$wSep=“==================================”;
试一试{

$Excel=New Object-ComObject Excel.Application;只是检查一下,因为您没有提到它,但是服务器上是否安装了Excel?Yeppers.嗯……想想看,我已经安装了O365……可能是硬安装Excel?……嗯……您需要安装Excel才能使用COM对象。我会考虑在您的服务器上使用ra而不是安装Excel。实际上,SQL Server知道Excel是正确处理相同数据功能的SSIS作业。除非我错误地解释了它们是如何一起工作的。这行代码在PowerShell控制台中的SQL Server上工作吗?
$Excel=New Object-coobject Excel.Application
?只是检查一下,因为您还没有提到,但是服务器上安装了Excel吗?Yeppers.嗯……想想看,我已经安装了O365……可能是Excel的硬安装?……嗯……您需要安装Excel才能使用COM对象。我会考虑在您的服务器上使用而不是安装Excel。实际上,SQL server知道Excel是SSIS j正确处理相同数据的ob可以正常工作。除非我错误地解释了它们如何一起工作。这行代码在PowerShell控制台中的SQL Server上工作吗?


$XL_FilePath = 'C:\tmp\tstdata\';

$XL_SQL_Input = 'MyExcel_Tst';

$wSep = "========================";

try{
$Excel = New-Object -ComObject Excel.Application;    <<<<<----  This is error line 

$Workbook = $Excel.Workbooks.Open($XL_FilePath + $XL_SQL_Input +'.xlsx');

$WorkSheet = $Workbook.Sheets.Item(2);

for ($i=1; $i -lt 3; $i++)
    { 
        $col = 1;
        $row = $i;
        if ($i -lt 2)
        { 
            $FCell = $WorkSheet.cells.Item($col, $row).Text;
        }else{
            $SCell = $WorkSheet.Cells.Item($col, $row).Text;
        }

    }

Write-Host $wSep;

Write-Host "The Excel sheet being worked on is" $WorkSheet.Name;

Write-Host $wSep;
write-host " First cell contains: " $FCell;
write-host " Second cell contains: " $SCell;

}
catch{

    Write-Host $wSep;
    Write-Host " Excel access error occured: ";
    Write-Host $_.ScriptStackTrace;
}


##  validation check - only check the 2nd value as it must be numeric, 1st is any character.

if ($SCell.Length-1 -match "^\d+$")
    {
        Write-Host " Valid data is present." -ForegroundColor Green; 
        $errorlevel = 0;
    }else{
        Write-Host "Data is NOT valid." -BackgroundColor RED -ForegroundColor Yellow;
        $errorlevel = 999;
    }


Write-Host "Exiting script with level " $errorlevel;

exit $errorlevel;