如何在不更改 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)
我创建了一个函数来打开 .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)