无需在PowerShell脚本上按Enter键两次

时间:2019-04-04 16:45:49

标签: powershell

我试图每天通过任务计划程序运行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()
}

1 个答案:

答案 0 :(得分:0)

如果脚本需要用户交互,那么它实际上不应该是计划任务。

如果编写需要确认的脚本,则需要使用-Co​​nfirm参数进行查找。

请参见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
    }
}

另请参阅ConfirmPreference

相关问题