正如问题所述。
我正在尝试使用 Windows Server 2012R2 上的任务计划程序安排 PowerShell 脚本每小时运行一次。这是一个远程服务器。
任务计划程序运行任务,没有任何错误。在任务历史记录中,它显示Action Started
、Action Copleted
和Task Completed
。
所选的任务计划程序的设置如下:
常规 - 无论用户是否登录都运行,以最高权限运行。
操作 -> 操作启动程序操作 -> 程序/脚本“C:\Program Files\PowerShell\7\pwsh.exe”(pwsh.exe 的位置)
操作 -> 添加参数 -Executionpolicy Bypass -File“R:\Public\IT\Vantage_Utilities\CNC_Scripts\File Transfer\Fastems\CNC_File_Transfer_Fastems.ps1”
位置 -> 本地计算机的名称
该脚本生成一个日志文件,它清楚地显示该脚本根本没有执行。手动执行时(右键单击 -> 使用 PowerShell 7 运行),它可以完美运行。
我尝试更改脚本的本地磁盘,但它是在 R:\ 还是 C:\ 上没有任何区别
我开始认为脚本本身存在问题,因为还有另一个使用任务计划程序中的 PS Core 7 执行的脚本可以正常工作。因此,我将在此处发布该脚本。这是一个简单的批处理文件,可将一个文件夹的所有内容从一台服务器移动到另一个服务器。我通过两个函数实现了这一点。Function MoveFiles
移动父文件夹的所有内容(不包括名为“Mazak”的子文件夹)。第二个函数Function MoveMazakFiles
仅移动“Mazak”的内容。(我完全知道我可以使用更少的代码行来完成此操作,但这不是重点)
代码:
$logPath = "\\MMS25163S1\Public\IT\Vantage_Utilities\CNC_Scripts\File Transfer\Fastems\Log.txt"
$trancriptPath = "\\MMS25163S1\Public\IT\Vantage_Utilities\CNC_Scripts\File Transfer\Fastems\LogTranscript.txt"
$getDate = Get-Date -Format "dddd MM/dd/yyyy HH:mm "
$counter = 0
$mazakCounter = 0
Start-Transcript -Path $trancriptPath -Append
Add-Content -Path $logPath -Value ("LOG CREATED $getDate") -PassThru
#Sources
$srcMca = "\\MMS25163S1\Public\NcLib\FromNC\*"
$srcMcaNameChg ="\\MMS25163S1\Public\NcLib\FromNC"
$srcMazak= "\\MMS25163S1\Public\NcLib\FromNC\Mazak\*"
$srcMcaNameChgMazak = "\\MMS25163S1\Public\NcLib\FromNC\Mazak"
#Destination
$destMca = "\\Sidney2\MfgLib\RevisedPrograms\MC-A"
#Time with milliseconds
$time = (Get-Date -Format hh-mm-fff-tt).ToString()
Function MoveFiles{
Param(
[string]$src,
[string]$dest,
[string]$srcNameChange
)
Get-Item -Path $src -Exclude *Mazak* -ErrorAction SilentlyContinue | ForEach-Object{
$counter++
$fileName = $_.BaseName
$fileNameExt = $_.Name
Write-host $fileName -ForegroundColor Green
Rename-Item -Path "$srcMcaNameChg\$fileNameExt" -NewName ($fileName+"_"+"(Time-$time)"+$_.Extension);
Add-Content -Path $logPath -Value ("Name changed: Time stamp added to $fileName ") -PassThru
}
Move-Item -Path $src -Exclude *Mazak* -Destination $dest -Force
Add-Content -Path $logPath -Value ("$counter file(s) moved to $dest") -PassThru
}
MoveFiles -src $srcMca -dest $destMca -srcNameChange $srcMcaNameChg
Function MoveMazakFiles{
Param(
[string]$srcMazak,
[string]$dest,
[string]$srcNameChange
)
Get-ChildItem $srcMazak -Recurse -ErrorAction SilentlyContinue | ForEach-Object{
$mazakCounter++
$fileName = $_.BaseName
$fileNameExt = $_.Name
Write-host $fileName -ForegroundColor Green
Rename-Item -Path "$srcMcaNameChgMazak\$fileNameExt" -NewName ($fileName+"_"+"(Time-$time)"+$_.Extension);
}
Move-Item -Path $srcMazak -Destination $dest -Force
Add-Content -Path $logPath -Value ("$mazakCounter file(s) from Mazak folder moved to $dest") -PassThru
}
MoveMazakFiles -srcMazak $srcMazak -dest $destMca -srcNameChange $srcMcaNameChg
Stop-Transcript
我已经搜索解决方案好几天了。任何帮助我都感激不尽。提前致谢!