Есть ли способ предотвратить новую строку после 80 символов в выводе, созданном сценарием powershell, выполняемым через ssh из linux? - PullRequest
0 голосов
/ 26 марта 2019

Я занимаюсь разработкой сценария ожидания Linux, который:

  1. устанавливает ssh-соединение с командной строкой хоста Windows.
  2. Доступ к PowerShell.
  3. Переходит в существующую папку вWindows и вызывает сценарий powershell.
  4. Сценарий 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.Но когда я выполняю сценарий ожидаемого вручную, тогда файл в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...