[英]Does Posh-ssh not work with windows Task Scheduler
一直在嘗試使用 posh-ssh 連接到 sftp。 當我運行它時工作正常,當我嘗試通過 Windows 任務調度程序運行它時它不起作用。
我嘗試切換要運行腳本的用戶,例如管理員、我自己、系統等。
我曾嘗試使用密鑰保存密碼並稍后解密。
$Password = ConvertTo-SecureString 'sftpPW' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password)
$sftpIP = 'hostIP'
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
然后其他方法 VVVVVVVVVV 這部分不是在腳本中運行而是創建密碼
Get-Random -Count 32 -InputObject (0..255) | Out-File -FilePath encrypt
ConvertTo-SecureString 'sftpPW' -AsPlainText -Force | convertFrom-secureString -key (get-content -path encrypt) | Out-File pw
^^^^^^^^^^
$SFTPUser="user"
$password = (cat pw | ConvertTo-SecureString -key (Get-Content -path encrypt))
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password)
$sftpIP = 'hostIP'
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
編輯*
Import-Module Posh-SSH
$datestuff = Get-Date
echo "start $datestuff" > C:\sftptestlog
$SFTPUser="user"
echo $sftpuser >> C:\sftptestlog
$Password = ConvertTo-SecureString 'sftpPW' -AsPlainText -Force
echo $password >> C:\sftptestlog
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password)
$sftpIP = 'hostip'
echo $Credential >> C:\sftptestlog
echo $sftpip >> C:\sftptestlog
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
echo $sftpSess >> C:\sftptestlog
sftptestlog 的預期輸出
開始時間 2019 年 9 月 10 日 16:31:19
用戶
System.Security.SecureString
用戶名密碼
-------- --------
用戶 System.Security.SecureString
主機IP
已連接的 SessionId 主機
--------- ---- ---------
2 主機IP 真
以上輸出僅在從命令行運行腳本時發生。 使用調度程序時,輸出是相同的,只有最后幾行(從 sessionID 開始)沒有打印出來。
我強烈建議您將一些日志記錄到您的腳本中,以便您可以診斷這類事情,因為任務調度程序事件日志根本沒有太大幫助。 一個簡單的方法是使用Start-Transcript
# Put this line at the very start of your script
Start-Transcript -Path 'c:\temp\sftplog.txt'
Write-Host 'Setting up user credentials'
$Password = ConvertTo-SecureString 'sftppassword' -AsPlainText -Force
$SFTPUser="username"
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password)
# Destination host
$sftpIP = 'hostip'
Write-Host 'Destination host is $sftpIP, testing availability'
Try {
Test-Connection -ComputerName $sftpIP -ErrorAction Stop
Write-Host 'Host is contactable'
}
Catch {
$_.Exception
}
# Attempt connection
Try {
Write-Host 'Trying to connect via SFTP to $SftpIP'
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential -ErrorAction Stop
Write-Host 'Done'
}
Catch {
$_
}
# Put this line at the very end of your script
Stop-Transcript
診斷出問題后,您可以刪除 Transcript 和/或所有 Write-Host 命令。
發現ENV:PSModulePath
在使用任務計划程序時沒有安裝模塊的路徑。 導入模塊時,我直接鏈接到模塊所在的位置。 Import-Module "C:\Program Files\WindowsPowerShell\Modules\Posh-SSH"
經過大量的頭部抨擊后弄清楚了這一點。 問題是 SSH 連接等待您接受 SSL 證書為有效。 因此它會在 New-SFTPSession 處暫停等待您的輸入。 如果您以自己的身份運行它,它只會詢問一次,因此您可能單擊了“確定”並且再也不必這樣做了。
再多的錯誤檢查或導入模塊都無法解決這個問題。
包括標志 -AcceptKey -Force ,它就像一個冠軍。
New-SFTPSession -ComputerName $server -Credential $creds -AcceptKey -Force
為避免 posh-ssh 模塊的路徑出現問題,您可以使用以下命令安裝它:
安裝模塊豪華 ssh -Scope AllUsers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.