簡體   English   中英

如何在任務調度程序中使用 VBA 正確運行 powershell 腳本?

[英]How to properly run a powershell script using VBA in a task scheduler?

我無法通過任務調度程序運行使用 vba 的 ps1 腳本。 我有幾個腳本,當我手動執行它們時,一切正常。 通過任務調度程序運行它們,我收到一條消息,表明腳本已成功執行(0x0)。 然而,實際上,什么都沒有發生。 我按如下方式運行腳本:

powershell.exe -命令“。C:\scripts\script.ps1;退出$LASTEXITCODE”

示例腳本:

$files = Get-ChildItem -Recurse -Directory "Z:\teamdata\icpl.qlt\Encoder Reports\ENCODER_LAM"           
$fileToCheck = "raport.xlsx"
$xlsxToCheck = "*.xlsx"
    foreach ($f in $files){
        $DirToTest = Join-Path $f.fullname $fileToCheck
        $xlsxToTest = Join-Path $f.fullname $xlsxToCheck
        if (Test-Path $DirToTest -PathType leaf) 
        {
            #Write-Output "exist"
        }
        else
        {               
            if(Test-Path $xlsxToTest -PathType leaf){
                $ExcelObject=New-Object -ComObject excel.application
                $ExcelObject.visible=$true
                $ExcelFiles=Get-ChildItem -Path $f.fullname
                $Workbook=$ExcelObject.Workbooks.add()
                $Worksheet=$Workbook.Sheets.Item("Arkusz1")
                    foreach($ExcelFile in $ExcelFiles){
                        $Everyexcel=$ExcelObject.Workbooks.Open($ExcelFile.FullName)
                        $Everysheet=$Everyexcel.sheets.item(1)
                        $Everysheet.Copy($Worksheet)
                        $Everyexcel.Close() 
                    }
                $savedir =  $f.fullname + '\raport.xlsx'
                $Workbook.SaveAs($savedir)
                $ExcelObject.Quit()
                taskkill /f /im excel.exe
                }
        }
    }
    

感謝您的建議,我設法從任務調度程序運行腳本。 我將映射驅動器更改為 UNC 路徑。

我在任務調度程序中運行 powershell

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

與以下 arguments

-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File "C:\script.ps1"

但現在我對腳本的 vba 部分有疑問:

    $data = @(
        [PSCustomObject]@{
            Name = "User_A"
            id = 1198
        },
        [PSCustomObject]@{
            Name = "User_B"
            id = 1156
        },
    )

    $Path = "\\xyz\xyz\xyz\xyz\test_encoder_reports\ENCODER_2"

    $files = Get-ChildItem -Path "\\xyz\xyz\xyz\xyz\test_encoder_reports\ENCODER_2" -Filter '*.xlsx' -ErrorAction 'SilentlyContinue'
    foreach ($f in $files){
       $var = $f.Name
#getting user id's and kit number of process   
        $ids = $var.substring(0, 4)
        $kitnbr = $var.substring(4, 4)
        $sum = 0

       $extn = [IO.Path]::GetExtension($f)
        if ($extn -eq ".xlsx")
        {
           $cr_date = $var.substring(24, 10);
           $manuf_data=$cr_date
$create new directory
           $new_dir = New-Item $Path\$manuf_data -ItemType Directory -Force
           $ExcelPath = $f.FullName
           $excel = New-Object -ComObject Excel.Application
           $excel.Visible = $true
           $workbook = $excel.Workbooks.Open($ExcelPath)
#insert data into table header
           $workbook.ActiveSheet.Cells.Item(1,13) = 'DATA UTWORZENIA'   
           $workbook.ActiveSheet.Cells.Item(1,14) = 'Operator'  
           $workbook.ActiveSheet.Cells.Item(1,15) = 'Nr Kita'   

#insert date of manufacture        
        $workbook.ActiveSheet.Cells.Item(2,13) = $manuf_data            
        foreach($i in $data){   
            if($ids -eq $data[$sum].id){
#insert username 
            $workbook.ActiveSheet.Cells.Item(2,14) = $data[$sum].name
#insert kit number            
            $workbook.ActiveSheet.Cells.Item(2,15) = $kitnbr
        }
           $sum++
        }
          $workbook = $Excel.ActiveWorkbook.Save()
          $workbook = $excel.Workbooks.Close()
          taskkill /f /im excel.exe

#move excel file to datacatalog       
        Move-Item -Path "\\xyz\xyz\xyz\xyz\test_encoder_reports\ENCODER_2\$f" -Destination "\\xyz\xyz\xyz\xyz\test_encoder_reports\ENCODER_2\$manuf_data\$f"


    }
}

我移動文件的代碼的最后一行正確執行,但是前面初始化 excel 的行不起作用,當然當我手動啟用腳本時一切正常。

我嘗試在任務調度程序中使用登錄到 o365 的域用戶進行授權,但 excel 仍然無法打開。

我應該將代碼的 excel 部分移動到一個單獨的.vbs 腳本並在任務調度程序中運行它嗎?

"C:\Windows\System32\cscript.exe"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM