我有一个PowerShell脚本,我打算从远程服务器运行。该脚本的目的是执行以下操作:
现在,我正在我的本地计算机上测试它,因此它将Excel文件从映射驱动器复制到我的C驱动器,然后从本地计算机上的某个位置抓取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 $_ }
我需要让脚本每天在半夜运行一次,所以我一直在努力使它成为预定的任务。我首先使用以下信息设置'Action':
编程/脚本: C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe 添加参数(可选): -NoProfile -ExecutionPolicy Bypass -file“C:\ Users \ nelsonth \ emsUpdateDesktop.ps1”
现在,如果我在安全选项设置为“仅在用户登录时运行”并选中“隐藏”复选框时运行此任务,则任务运行完美。
由于这将在半夜从远程桌面运行,我需要在我注销时运行该脚本。但是,当我选择“运行用户是否登录”和“以最高权限运行”时,脚本将不再运行。
我需要这个才能工作,所以任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
当运行为"无论用户是否登录",您的PowerShell脚本很可能必须手动映射驱动器或通过UNC路径访问该文件。
尝试在脚本顶部添加以下内容,检查驱动器号,然后在未找到时映射:
if (-Not (Test-Path 'X:\')) {New-PSDrive -Name "X" -PSProvider FileSystem -Root "\\MyServer\MyShare"}