Windows 为什么不执行此powershell脚本
我正在尝试制作一个脚本,该脚本执行以下操作:Windows 为什么不执行此powershell脚本,windows,powershell,Windows,Powershell,我正在尝试制作一个脚本,该脚本执行以下操作: 打印文件 删除所有空行 过滤掉所有不包含“重新分配”一词的行 删除每行开头的所有空格和“>” 在我为第4步添加函数之前,一切正常,之后powershell会抛出一系列错误。我做错了什么 PS C:\Users\pzsr7z.000\Desktop\incidentoutput> cat .\csvtest.txt | ? {$_.trim() -ne "" } | sls "^Reassignment$" -Context 1,2 | fore
PS C:\Users\pzsr7z.000\Desktop\incidentoutput> cat .\csvtest.txt | ? {$_.trim() -ne "" } | sls "^Reassignment$" -Context 1,2 | foreach{ $_.TrimStart(">"," ")}
Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
At line:1 char:90
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")}
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
At line:1 char:90
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")}
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
At line:1 char:90
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")}
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
At line:1 char:90
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")}
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
所有的函数都各自独立工作,当我尝试添加最后一部分时,事情就搞砸了 我的灵能告诉我,您正试图对cmdlet返回的对象使用
String
的方法
首先尝试将其强制转换为字符串:
... | sls "^Reassignment$" -Context 1,2 | foreach{ $_.ToString().TrimStart(">"," ")
此正则表达式模式:
^Reassignment$
将只匹配具有确切值的行Reassignment
——并非所有包含Reassignment
当您已经在使用Get Content
(cat
)读取文件中的行时,您也可以在所有行上使用-match
操作符(-cmatch
区分大小写):
-match
运算符只返回匹配的字符串,因此您可以直接对以下字符串调用TrimStart()
:
$ReassignmentLines = (cat .\csvtest.txt) -cmatch 'Reassignment' |ForEach-Object {
$_.TrimStart(">"," ")
}
不包含???什么?您好,当我尝试使用这个函数时,trim函数似乎只处理匹配输出的第一行(请参见屏幕截图链接),而不是所有的行。是什么导致它这样做的?@lacrosse1991嗯,我不知道为什么它对你有用。您正在将内容读取到数组(每行都是数组的一个元素),然后将每个元素与
选择字符串匹配。但这意味着selectstring
没有返回的上下文,因为它一次只能看到一行。能否提供一个csvtest.txt
文件的示例?与您的邮件中的内容相同吗?您好,很抱歉回复时间太长。虽然我走了另一条路,但最终还是让它工作了。你觉得这个剧本怎么样?我是powershell的新手(昨天刚开始,之前只做过perl、bash和一些python,bash是我的最爱),所以如果您有任何意见,我将不胜感激。我只是拍了一些截图,因为网络上的pastebin/文本共享网站被屏蔽了。脚本:输入:(一个大文本文件中的文本样本,我正在同时处理几个文件)输出:@lacrosse1991有一个专门的SE站点,用于解决此类问题:,在那里讨论代码会容易得多。快速浏览一下,您不需要临时文件,老实说,您的解决方案应该可以很好地工作,您只需要扩展它以去除空白和
。就我个人而言,我只需要使用(用\r\n
替换\n
)获取所有数据,并在使用导出CSV
保存到CSV之前对其进行修剪。
$ReassignmentLines = (cat .\csvtest.txt) -cmatch 'Reassignment' |ForEach-Object {
$_.TrimStart(">"," ")
}