我有Linux和Windows的混合环境,但构建脚本是在Ruby中创建的。我试图在涉及PSRemoting的每个Web服务器上做一些更改,但看起来我有一些问题将字符串转换为powershell命令:
%x{ powershell.exe invoke-command -computername iistest.neogov.net -scriptblock { $oldpath = c:\webdata\corehr; $newpath = c:\webdata\corehr\07241439; Get-ChildItem -Path $oldpath -Recurse | where {($_.FullName -notmatch $oldpath.replace('\','\\')) -or ($_.FullName -notmatch $newpath.replace('\','\\'))}} }.strip.downcase
这个产品是:
where-object
'where-object'未被识别为内部或外部命令,可操作程序或批处理文件。
如果我仅使用where
替换|
,则错误不同:
在语句块或类型定义中缺少关闭'}'。 + CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException + FullyQualifiedErrorId:MissingEndCurlyBrace
信息:无法找到给定模式的文件
我认为管道(df = df.loc[3., 'columnA.']
print (df)
index.
3.0 data.
3.0 data.
3.0 data.
3.0 data.
Name: columnA., dtype: object
)可能会让ruby解释器感到困惑,但不确定如何避免它?
答案 0 :(得分:1)
它可能只是Anwser的一部分,但对于CMD来说,是|的转义字符是^,如果使用^ |然后输出不同但不正确(我确实改变了一些代码以使其工作,所以你可能想要复制和调整我的),Ruby可能会使用相同或不同的东西,我不确定,但我相信你是在右边轨道。
powershell.exe -command {invoke-command -scriptblock {$oldpath = "C:\Users\...\corehr"; $newpath = "C:\Users\...\corehr\07241439"; Get-ChildItem -Path $oldpath -Recurse | where {($_.FullName -notmatch $oldpath.replace('\','\\')) -or ($_.FullName -notmatch $newpath.replace('\','\\'))}}}
使用CMD结果
INFO: Could not find files for the given pattern(s).
但它在powershell中给出了:
Directory: C:\Users\...\corehr
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 24-7-2017 15:41 test1
d---- 24-7-2017 15:41 test2
更换|与^ |结果
invoke-command -scriptblock {$oldpath = C:\Users\...\corehr; $newpath = C:
\Users\...\corehr\07241439; Get-ChildItem -Path $oldpath -Recurse | where
{($_.FullName -notmatch $oldpath.replace('\','\\')) -or ($_.FullName -notmatch
$newpath.replace('\','\\'))}}
现在它认为-command输入是一个字符串?但正如您所看到的,管道字符在此输出中正确显示。