我有一个调用exe的Powershell脚本,在手动执行脚本时效果很好。
但是,在任务计划程序中安排脚本时,除了调用exe之外,一切正常。我也试过Invoke-Command
,但这没有用。
$servers="server1","server2"
$sbServer = [System.Text.StringBuilder]::new()
$cred = "password"
NET USE \\sourceserver\d$ /u:localserver\WDeployAdmin
$cred
foreach ($server in $servers)
{
[void]$sbServer.AppendLine($server)
}
[System.IO.File]::WriteAllText("D:\Temp\pushlist.txt", $sbServer.ToString())
&"D:\Temp\copyfileout.exe" "sourceserver" "d`$\Projects\eCommerce\Legacy\wwwroot" "d`$\webserv\wwwroot\website" "$true"
NET USE \\localserver\d$ /D /Y
从Task Scheduler调用Powershell脚本时我看到的行为是调用了copyfileout.exe,但是没有传入参数.copylist.txt被copyfileout.exe用作将文件复制到它们的目标来自sourceserver。
如果有帮助,copyfileout.exe是一个C#控制台应用程序。 TaskScheduler在本地管理员帐户下运行,任务设置为"以最高权限运行"。
答案 0 :(得分:0)
我发现在PowerShell中运行外部应用程序时使用Start-Process
最可靠。以下是我的一个脚本中的示例。
$process = Start-Process -FilePath $gamPath -ArgumentList "update", "group", $emailGroup, "add", "member", "user", $emailAddress -Wait -PassThru -WindowStyle Hidden
if ($process.ExitCode -ne 0)
{
Write-Output "Failed"
}
还要记住,您应该指定exe的完整路径,因为任务计划脚本可能无法在它所在的目录中运行。
答案 1 :(得分:0)
问题最终出现在" Start In" TaskScheduler中Action的选项。出于某种原因,exe不会选择它,并使用system32目录。更改了控制台应用程序以处理此问题。感谢您的回复/反馈。