如何在执行脚本PowerShell.exe -File时将结果作为返回的对象类型返回

时间:2017-11-14 10:50:25

标签: powershell

如果我有一个脚本(script.ps1),如下所示:

$dir = Get-Item "C:\Windows"
$dir

如果我称之为:

$myDir = "script.ps1"

我在$dir中取回$myDir对象,如果我使用:

$myDir.Name

我明白了:

Windows

我有一个场景需要使用

调用脚本
$myDir = Powershell.exe -File "script.ps1"

有了这个,我最终以字符串数组对象的形式获得输出,而不是以脚本返回的对象的形式,因为命令显然在不同的会话中执行。因此,我不能打电话给任何财产。例如:$myDir.Name不返回任何内容

我的问题是,如何在上述情况下返回返回的对象类型。即使我执行

$myDir = Powershell.exe -File "script.ps1"

$myDir.Name应该返回Windows。它甚至可能吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你可以尝试这样:

script.ps1 (返回$dir的值):

$dir = Get-Item "C:\Windows"
return $dir

script2.ps1 (返回$dir的名称):

$myDir = .\script.ps1
$myDir.Name

$myDir.Name返回:Windows

答案 1 :(得分:0)

您可以使用powershell.exe的-OutputFormat参数。

#Write the command to file
"get-item c:\windows\" | out-file C:\temp\test.ps1
$justastring = powershell.exe -file c:\temp\test.ps1
#this is a string array
$justastring | get-member
$notastring = powershell.exe -outputformat xml -file c:\temp\test.ps1
#this is a Deserialized.System.IO.DirectoryInfo
$notastring | get-member

此输出也可以保存为文件,稍后再返回。请参阅Import-CliXmlExport-CliXml。请注意,因为它们是序列化对象,所以它们不再是" live"。您习惯看到的一些方法将不存在,属性值也将不再更新。它本质上是命令运行时命令输出的快照。