感谢您的帮助。所以我的脚本有问题。我正在尝试将我的脚本从批处理转换为PowerShell,主要是为了尝试学习它,所以我对PowerShell是全新的,但我知道其他语言,所以我在编程时很不错。我的脚本创建了一个kivaCommands.txt
文件,然后在Plink中用于在服务器上执行。我的批处理脚本适用于Plink,但当我转换为PowerShell时,-m
开关上的Plink行错误。我得到了
sh: ■e: not found
无论txt文件中有什么命令,我都会收到此错误,即使该文件为空。如果我传递一个命令来执行,Plink行工作正常。这是我遇到问题的代码。
$hostLogin = "myServer"
$passwd = "myPassword"
$command = "H:\kivaCommands.txt"
C:
cd \
cd "Program Files (x86)\PuTTY"
./PLINK.EXE -ssh $hostLogin -P 22 -pw $passwd -m $command
cd
命令是我能让它工作的唯一方法。我尝试了所有其他方式给出整个路径并为路径创建变量但Plink不会执行。
因此,经过更多的故障排除后,我将其缩小到创建的文件。如果我手动创建文件它工作正常但我的脚本在调用Plink之前创建文件。我尝试了三种不同的方法来创建文件
"exit ^| sqlplus / @kiva_extract $assessorYear" | Set-Content H:\kivaCommands.txt -Encoding Unicode
"exit ^| sqlplus / @kiva_extract $assessorYear" | Out-File H:\kivaCommands.txt -Encoding Unicode
"exit ^| sqlplus / @kiva_extract $assessorYear" > H:\kivaCommands.txt
该文件创建正常并且看起来正确,但Plink无法正确打开。
答案 0 :(得分:1)
PowerShell生成的UTF-8输出文件以UTF-8 BOM mark开头。
Unix系统通常不期望BOM,因此远程shell尝试将其解释为命令,失败。 BOM是错误消息中的方形字符(■
):
sh: ■e: not found
我不知道如何防止BOM出现在输出中。
但你可以事后剥掉它:
$MyPath = "H:\kivaCommands.txt"
$MyFile = Get-Content $MyPath
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)
请参阅Using PowerShell to write a file in UTF-8 without the BOM
答案 1 :(得分:0)
尝试执行此操作:
& 'C:\Program Files (x86)\PuTTY\Plink.exe' -ssh $hostLogin -P 22 -pw $passwd -m $command
当exe路径中包含空格时,您必须引用路径。但是PowerShell的引用路径是just
一个字符串。您需要告诉PowerShell执行字符串命名(或exe指向)的命令。这就是调用操作符&
的作用。它说“执行我右边的字符串”。请注意,该字符串只是命令名称,不应包含该命令的任何参数。
答案 2 :(得分:0)
我使用 tst10 遇到了这个问题,发现不使用编码 Unicode 而是尝试 ASCII 。原因是plink正在寻找一个Windows txt文件。
文本文件采用 ASCII 格式,因此以下行不会是:
class Quadratic:
def __init__(self, a, b, c):
self.a, self.b, self.c = a, b, c
self.d = float(self.b ** 2 - 4*self.a*self.c)
self.x1 = ((-b)-cmath.sqrt(self.d))/(2*a)
self.x2 = ((-b)+cmath.sqrt(self.d))/(2*a)
@property
def solution(self):
return [x.real if x.imag == 0.0 else x for x in [self.x1, self.x2]]
def __str__(self):
return "X1 = {}, X2 = {}".format(*self.solution)
myList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, 2, -3]]
for _ in myList:
print Quadratic(*_)
它将是:
function createList(depth, elements, iterator, parentElement) {
var newDepth = 0;
for(var i=iterator; i<elements.length; i++) {
var match = elements[i].text.match(/^\s*(\/+)/);
if(match == null) {
newDepth = 0;
} else {
newDepth = match[0].length;
}
if (depth == newDepth-1) {
var nestedList = document.createElement('ul');
parentElement.lastChild.appendChild(nestedList);
createList(newDepth, elements, i, nestedList);
} else if (depth == newDepth) {
var nextElement = document.createElement('li');
var span = document.createElement('span');
span.innerHTML = elements[i].text;
nextElement.appendChild(span);
parentElement.appendChild(nextElement);
}
}
}
var value = ['Home', '* This is active', '/This is dropdown', '// shhh...', '/ we ♥ you', '//Last one', 'Last one', 'Last one']
.map(function(pLine) {
return {
'text': pLine,
'page_id': null
};
});
var listElement = document.createElement('ul');
createList(0, value, 0, listElement);
document.body.appendChild(listElement);