Я занимаюсь разработкой сценария ожидания Linux, который:
- устанавливает ssh-соединение с командной строкой хоста Windows.
- Доступ к PowerShell.
- Переходит в существующую папку вWindows и вызывает сценарий powershell.
- Сценарий Power Shell сохраняет выходные данные в текстовый файл.
Когда я запускаю сценарий Linux с использованием Java, powershell выполняется успешно.Однако выходной файл, созданный скриптом powershell, имеет ширину всего 80 символов.Когда я запускаю скрипт вручную (через терминал и передаю аргументы вручную), выходной файл создается без новых строк после 80 символов.
Я пытался изменить кодировку на utf8 и utf16 в powershell, но это неНе могу решить проблему
Get-MsolDomainFederationSettings -DomainName "example.com" | Out-File "C:\temp\fedSettings.txt"
Get-MsolDomainFederationSettings -DomainName "example.com" | Format-List * | Out-File "C:\temp\fedSettings.txt" -Encoding utf8
Get-MsolDomainFederationSettings -DomainName "example.com" | Format-List * | Out-File "C:\temp\fedSettings.txt" -Encoding utf16
Я также гарантировал, что ожидаемые сценарии не содержат символов Ctrl + M.
Это сценарий, который я выполняю с помощью java ProcessBuilder
#!/usr/bin/expect
set timeout 20
#This expect script script invokes an existing script in Windows Powershell on a Windows Host via SSH from Linux.
set WINDOWS_HOST_NAME [lindex $argv 0]
set WINDOWS_USER [lindex $argv 1]
set WINDOWS_PASSWORD [lindex $argv 2]
set WINDOWS_FOLDER_PATH [lindex $argv 3]
set SCRIPT_FILE_NAME [lindex $argv 4]
spawn ssh $WINDOWS_USER@$WINDOWS_HOST_NAME
expect "yes/no" {
send "yes\r"
expect "*?assword" { send "$WINDOWS_PASSWORD\r" }
} "*?assword" { send "$WINDOWS_PASSWORD\r" }
expect "*$WINDOWS_USER*"
send "powershell\r";
send "cd $WINDOWS_FOLDER_PATH\r"
send "\.\\$SCRIPT_FILE_NAME\r"
send "exit\r"
send "exit\r"
interact
Это сценарий powershell, который существует в Windows и вызывается сценарием linux.
$AdminUser = "someone.com"
$Pswd = Get-Content "C:/creds/cred1" | ConvertTo-SecureString
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $AdminUser, $Pswd
$dom = "example.com"
$dateTime = Get-Date -f "MMddyyyy_HHmm"
Connect-MsolService -Credential $cred
Get-MsolDomainFederationSettings -DomainName $dom | Format-List * | Out-File "C:\temp\fedSettings.txt"
$filenameFormat = "fedSettings_$(Get-Date -Format "MMddyyyy_HHmm").txt"
Rename-Item -Path "C:\temp\fedSettings" -NewName $filenameFormat
Я ожидаю, что когда PowerShell создает выходной файл, новая строка вводится, только еслисодержание / данные строки завершены.Тем не менее, созданный выходной файл ограничен только 80 chars
при выполнении через Java / Automatic.Но когда я выполняю сценарий ожидаемого вручную, тогда файл в порядке.