リモートサーバーから実行するPowerShellスクリプトがあります。スクリプトの目的は、次の操作を行うことです。ユーザーがログオフしたときにタスクスケジューラからPowershellスクリプトを実行する
- コピー、リモートサーバー
- Excelファイルを開き、マクロを実行するために、マップされたドライブからExcelファイルその
- マクロコピーAccessテーブルそれは、リモートサーバー上だとExcelファイルにそれを貼り付け、その後、いくつかのデータ操作
- は、Excelファイルを保存し、それを閉じてから、コピー
今戻ってマップされたドライブに、I私はテストしている私のローカルマシン上のtは、マップされたドライブからCドライブにExcelファイルをコピーしてから、ローカルマシン上の場所からAccessテーブルを取得しています。 Powershellから実行すると完全に動作します。ここでは、コードです:
# collect excel process ids before and after new excel background process is
# started
$priorExcelProcesses = Get-Process -name "*Excel*" | % { $_.Id }
$Excel = New-Object -ComObject Excel.Application
$postExcelProcesses = Get-Process -name "*Excel*" | % { $_.Id }
#run program
$folderPath = "my folder goes here"
$filePath = "my folder gooes here\filename.xlsm"
$tempPath = "C:\Users\Public"
$tempFile = "C:\Users\Public\filename.xlsm"
#copy file from I drive to remote desktop
Copy-Item -Path $filePath -Destination $tempPath
#create Excel variables
$excel = new-object -comobject excel.application
$excel.visible = $False
$excelFiles = Get-ChildItem -Path $tempPath -Include *.xls, *xlsm -Recurse
#open excel application and run routine
Foreach($file in $excelFiles)
{
$workbook = $excel.workbooks.open($tempFile)
$worksheet = $workbook.worksheets.item(1)
$excel.Run("getAccessData")
$workbook.save()
$workbook.close()
}
#copy file from remote desktop back onto I drive
Copy-Item -Path $tempFile -Destination $folderPath
# try to gently quit
$Excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
# otherwise allow stop-process to clean up
$postExcelProcesses | ? { $priorExcelProcesses -eq $null -or $priorExcelProcesses -notcontains $_ } | % { Stop-Process -Id $_ }
私は夜中に1日1回実行するスクリプトを持っている必要がありますので、私はそれスケジュールされたタスク作りに取り組んでいます。私が最初に次の情報を 'アクション' を設定します
プログラム/スクリプト: C:\ WINDOWS \ System32に\ WindowsPowerShell \ v1.0をするの\たpowershell.exe (オプション)引数を追加します。 を-NoProfile -ExecutionPolicy Bypass -file "C:\ Users \ nelsonth \ emsUpdateDesktop.ps1"
セキュリティオプションが[ユーザーがログオンしているときのみ実行]に設定されている状態でこのタスクを実行すると、[非表示"チェックボックスをオンにすると、タスクは完全に実行されます。
夜中にリモートデスクトップから実行されるため、ログオフしている間にスクリプトを実行する必要があります。しかし、「ユーザーがログオンしているかどうかを実行する」と「最高の権限で実行する」を選択すると、スクリプトはもう実行されません。
私はこれが動作するために必要なので、誰でもこのトラブルシューティングを手伝ってもらえますか?
は、私は他の質問にあなたの答えの手順に続き、それがなかったの何も変更しないでください。 – tjnel
私は、関連する質問の答えに従って、Excelを開くときに「オブジェクトのリンクと埋め込みを使用できません」という通知が表示されることを確認しました。アプリケーションは、その後、既存のExcelファイルを開くことができませんでした。 Excelを再度使用するために提案された変更を元に戻さなければならなかったので、私はこの経路をこれ以上延期しません。 – tjnel