如何在不更改Powershell类型的情况下返回对象?

时间:2016-10-19 10:41:42

标签: function powershell object ms-word ms-office

我创建了一个打开.docx文件的函数:

Function OpenWordDoc($Filename)

{
    $objWord = New-Object -comobject Word.Application  
    $objWord.Visible = $True;
    $objWord.Documents.Open($Filename)
    $objSelection = $objWord.Selection
    Return $objSelection;
}

我这样称呼它:

$doc=OpenWordDoc -Filename "C:\Users\$UserName\Desktop\test.docx";

现在我想调用方法$doc.TypeText("test")来添加一些文本,但这只适用于我运行脚本而不通过创建函数的步骤。 我注意到在我Return $ObjSelection;之后将其保存在$doc中,$doc不是同一个ObjectType。这就是为什么我不能再调用这个方法了。

如何将$doc设置为与$ObjSelection完全相同而不将其全局化?

1 个答案:

答案 0 :(得分:1)

实际上看到了更改的返回类型;你所看到的是PowerShell最常见的陷阱之一。事实上,您已经在Simple-Talk.com上的文章A Plethora of PowerShell Pitfalls中遇到了陷阱#1。我鼓励你先去那里 - 陷阱以测验形式呈现 - 让你在答案揭晓之前考虑问题可能是什么。我等一下。

好的,所以如果你仔细阅读了这篇文章,你现在就知道PowerShell从函数中返回“东西”的灵活性就是让你绊倒的原因。具体来说,行$objWord.Documents.Open($Filename)将输出发送到stdout,发送到stdout的所有都包含在从函数返回的内容中!为了使您的函数仅返回 $objSelection,您只需要抑制上面一行的输出。至少有5种方法可以做到这一点。一个流行的就是把它变成无效:

[void] $objWord.Documents.Open($Filename)