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

How to return Objects without changing their Type in Powershell?

我创建了一个函数来打开 .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 完全相同而不使其成为全局的?

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

好的,所以如果您仔细阅读了这篇文章,您现在就会知道 PowerShell returns "stuff" 函数的灵活性是让您在这里绊倒的原因。具体来说,行 $objWord.Documents.Open($Filename) 将输出发送到标准输出,并且 发送到标准输出的所有内容 都包含在从您的函数 return 编辑的内容中!为了让你的函数 return 只有 $objSelection 你只需要抑制上面一行的输出。至少有 5 种方法可以做到这一点。一种流行的方法是将其转换为无效:

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