4
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関数内で文字列関数を呼び出すためのトリックがありますか?

助けてくれてありがとう!

4

1 に答える 1

11

IndexOfは type のメソッドですstring。のどこかで、 System.IO.FileInfoとして扱われるような方法で...doing stuff操作していると思われます。$file

これは、自分の環境で複製しようとして動作するようになったためだと思われます。

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 オブジェクトのコレクションになるような方法で変更していないことを前提としています。

于 2013-09-25T01:10:20.567 に答える