[英]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.