Powershell 协助将MXT会话文件导入MobaXterm

Powershell 协助将MXT会话文件导入MobaXterm,powershell,Powershell,我正在使用一个名为MobaXterm的工具向Linux虚拟机打开SSH会话。我正在尝试从脚本创建主机名的导入文件,这样我就可以动态创建要连接到的VM列表,而无需在MobaXterm Gui中手动添加它们。为此,我创建了以下PowerShell脚本,从.csv文件中读取主机名和IP地址。该脚本在创建.mxtessions文件的过程中工作,该文件似乎是从我的测试中导出的,从MobaXterm导出会话文件。以下是我的工作脚本: $csvFilename = 'C:\mobaxterm\mobaXter

我正在使用一个名为MobaXterm的工具向Linux虚拟机打开SSH会话。我正在尝试从脚本创建主机名的导入文件,这样我就可以动态创建要连接到的VM列表,而无需在MobaXterm Gui中手动添加它们。为此,我创建了以下PowerShell脚本,从.csv文件中读取主机名和IP地址。该脚本在创建.mxtessions文件的过程中工作,该文件似乎是从我的测试中导出的,从MobaXterm导出会话文件。以下是我的工作脚本:

$csvFilename = 'C:\mobaxterm\mobaXterm.csv'
$outfile = 'C:\mobaxterm\MobaXterm_Sessions.mxtsessions'
$csv = Import-Csv -Path $csvFilename -Delimiter ','

@'
[Bookmarks]
SubRep=
ImgNum=42
'@ | Out-File -FilePath $outfile

$output = foreach ($line in $csv) {
    "$($line.hostname)= #109#0%$($line.ip)%22%[loginuser]%%-1%-1%%%22%%0%0%0%%%-1%0%0%0%%1080%%0%0%1#MobaFont%10%0%0%0%15%236,236,236%0,0,0%180,180,192%0%-1%0%%xterm%-1%0%0,0,0%54,54,54%255,96,96%255,128,128%96,255,96%128,255,128%255,255,54%255,255,128%96,96,255%128,128,255%255,54,255%255,128,255%54,255,255%128,255,255%236,236,236%255,255,255%80%24%0%1%-1%<none>%%0#0#"
}

$output | Out-File -FilePath $outfile -Append
$csvFilename='C:\mobaxterm\mobaxterm.csv'
$outfile='C:\mobaxterm\mobaxterm\u Sessions.mxtsessions'
$csv=导入csv-路径$csvFilename-分隔符','
@'
[书签]
副代表=
ImgNum=42
“@|输出文件-文件路径$outfile
$output=foreach($csv中的行){
“$($line.hostname)=#109#0%$($line.ip)%22%[登录用户]%%-10%0%0 0%0%0 0%0%0%0%0%0%0%0%0%0%0%0%0%1,mobebebebe学学学学学学学学学,10%0%0%10%0%10%10%1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%10%1%10%10%1%10%1%10%1%10%1,10%10%10%10%10%10%10%10%10%10%10%10%10%10%1%10%10%10%1%10%10%10%10%10%1%10%10%10%1%10%10%1%10%10%1%10%1%10%1%10%1%10%10%10%10%10%10%10%10%10%10%10%10%10%10%10%"
}
$output | Out File-FilePath$outfile-Append
导入文件只是一个包含两列的.csv文件,其中第1列有主机名,第2列有每个主机名的IP地址

正如我所说,我的脚本似乎正在创建一个似乎有效的文件,但当我尝试将这个.mxtessions文件导入MobaXterm时,它不会加载。没有显示任何错误。也许有一个日志我可以查看为什么导入失败

为了进一步分类这个问题,我手动将一些机器添加到我的MobaXterm中,然后手动导出该文件。我已将导出的文件与使用PowerShell脚本创建的文件进行了比较。我看不出两个文件之间有任何区别。两个文件的属性看起来完全相同(当然名称除外)。通过比较,每个文件中的数据都是相同的

有人能为我提供一些关于为什么生成的.mxtsessions文件无法加载到MobaXterm中的建议吗?我查看了MobaXterm.log文件,没有发现任何与导入相关的错误?是否有其他人创建了导入会话文件并将其成功导入MobaXterm

如果本论坛能为我提供任何建议或建议,我将不胜感激


谢谢。

从刚刚的测试来看,我认为这是一个字符编码问题。如果保存为ASCII或UTF8 sans BOM,MobaXTerm导入可以工作,否则无法工作

如果只有ASCII字符,请在写入时尝试添加编码参数:

'@ | Out-File -FilePath $outfile -Encoding ASCII


$output | Out-File -FilePath $outfile -Append -Encoding ASCII
如果您需要Unicode,那么如果没有PowerShell 5.1或更早版本的BOM,就无法编写Unicode,因此您需要:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($outfile, $allyourtextcontent, $Utf8NoBomEncoding)

哇!谢谢你的快速回复。这正是我解决问题所需要的。非常感谢你的帮助。对不起,我还没有足够的声誉来评价你的回答。但我确实点击了upvote,所以希望这对你很重要。:)很高兴它有帮助;点击作为一个被接受的答案(你确实这么做了)比投票更有帮助,所以谢谢你:)