【问题标题】:$string.IndexOf('.') inside powershell function returns method invocation failedpowershell 函数中的 $string.IndexOf('.') 返回方法调用失败
【发布时间】:2013-09-25 01:01:25
【问题描述】:
Function doSomething($param1 $param2 $file)
{
...doing stuff
$pos = $file.IndexOf('.')
}

doSomething -param1 'stuff' -param2 'more stuff' -file 'C:\test.txt'

返回错误:方法调用失败,因为 [System.IO.FileInfo] 不包含名为“IndexOf”的方法。

但是在函数之外或从命令行调用它没有问题。

这是 powershell 的限制还是在 powershell 函数中调用字符串函数有什么技巧?

感谢您的帮助!

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    IndexOfstring 类型的方法。我怀疑在...doing stuff 的某个地方,您正在对$file 进行操作,以至于它被视为System.IO.FileInfo

    我怀疑这部分是因为我试图在我的环境中复制它并让它工作:

    function doSomething ($file) 
    { 
        # This gets the index of . in 'C:\test.txt', which should be at position 7.
        $pos = $file.IndexOf('.')
        $pos
        $file.GetType() 
    }
    doSomething -file 'C:\test.txt'
    7
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    

    您是在操作$file,还是使用它来修改其他文件?如果您不介意对象是[System.IO.FileInfo],则可以使用$file.fullname 来取回您的路径字符串。这假定您没有修改它以使其成为 FileInfo 对象的集合。

    【讨论】:

    • 你是对的,我正在创建文件 System.IO.FileInfo 对象。我正在为文件夹路径生成 $file 和 get-childitem 。它不需要保留为 System.IO.FileInfo 对象来满足我的需要,因此我只需将其转换为字符串 $file.tostring() 即可使用 indexOf。感谢您的帮助!
    猜你喜欢
    • 2023-03-06
    • 2011-04-14
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多