我试图每天通过任务计划程序运行PowerShell脚本,但是该脚本不会运行。当我(以管理员身份)手动在PowerShell中输入以下代码时,按两次Enter键。我相信,由于我必须按两次Enter键,因此它将无法通过任务计划程序运行。
是否可以调整代码以使其与任务计划程序一起使用?
我正在运行Windows 2012 R2和PowerShell的5.1版。
请注意,我在Windows 10和运行PowerShell 5.1版本的计算机上运行了完全相同的脚本,并且它以正确的方式工作(仅需按Enter键一次)
我希望只按一次Enter键即可运行我的PowerShell脚本,但是第一次按Enter时的实际输出会带一行仅带有“ >>”的行,然后再次按Enter即可执行脚本。 / p>
Powershell脚本:
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = ""
UserName = ""
Password = ""
SshHostKeyFingerprint = ""
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Transfer files
$session.PutFiles("", "").Check()
}
finally
{
$session.Dispose()
}
答案 0 :(得分:0)
如果脚本需要用户交互,那么它实际上不应该是计划任务。
如果编写需要确认的脚本,则需要使用-Confirm参数进行查找。
请参见Are you sure? Using the -WhatIf and -Confirm parameters in PowerShel
Remove-MailContact-身份“ $ sourceEmail”-确认:$ Y -WhatIf
您编写的cmdlet或代码必须支持它。对于您编写的代码,这意味着使用advanced functions。
How to write a PowerShell function to use Confirm, Verbose and WhatIf
function Set-FileContent
{
[cmdletbinding(SupportsShouldProcess)]
Param
(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$Content,
[Parameter(Mandatory = $true)]
[ValidateScript( {Test-Path $_ })]
[string]$File
)
if ($PSCmdlet.ShouldProcess("$File" , "Adding $Content to "))
{
Set-Content -Path $File -Value $Content
}
}