有没有一种方法可以防止在Linux中通过ssh执行的powershell脚本创建的输出中的80个字符后出现换行符?

时间:2019-03-26 01:46:12

标签: java powershell

我正在开发Linux期望脚本:

  1. 与Windows主机命令提示符建立ssh连接。
  2. 访问powershell。
  3. 导航到Windows上的现有文件夹并调用Powershell脚本。
  4. Power Shell脚本将输出保存到文本文件。

当我使用Java运行Linux脚本时,powershell成功执行。但是,powershell脚本创建的输出文件只有80个字符宽。 当我手动运行脚本(通过终端并手动传递参数)时,创建的输出文件在80个字符之后没有新行。

我试图在Powershell中将编码更改为utf8和utf16,但无法解决问题

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

这是Windows中存在的powershell脚本,并由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创建输出文件时,仅在该行的内容/数据完整时才引入新行。 但是,通过java / automated执行时,创建的输出文件仅限于80 chars。 但是,当我手动执行Expect脚本时,该文件就可以了。

0 个答案:

没有答案