作者:缘来是你2502855331 | 来源:互联网 | 2022-11-08 16:21
我是脚本新手,我正尝试将有关VM的返回信息写到文本文件中。我的脚本如下所示:
Connect-VIServer -Server 192.168.255.255 -Protocol https -User xxxx -Password XXXXXX
Get-VM -Name xxxxxx
Get-VM xxxxx | Get-HardDisk | Select Parent, Name, Filename, DiskType, Persistence | FT -AutoSize
Out-File -FilePath C:Filepath
我能够连接到VM,检索HDD信息并在控制台中看到它。该文件将在需要的位置创建并正确命名。文件中没有数据。我尝试过Tee-Object,结果相同。我也尝试了-append开关。我确实看到了有关将数据作为数组返回的文章,而Powershell无法将数据从数组移至字符串。我是否需要创建一个变量来保存返回的数据并从那里写入文件?
谢谢
1> mklement0..:
Guenther Schmitz的回答很有效,但是值得解释一下原因:
您Out-File -FilePath C:Filepath
是一个不接收任何输入的独立命令。
Out-File
没有输入的调用只会创建一个空文件(0
字节)。
为了使cmdlet Out-File
能够从其他命令接收输入(...
如下所示),必须使用管道,这意味着您必须|
在输入命令之后放置a 并跟随其Out-File
调用:
请注意,我-Path
为不太常用的[1]使用了较短的参数别名-FilePath
... | Out-File -Path C:Filepath
在最简单的情况下,如上所述,将整个命令(管道)放在同一行上;如果您希望将其分布在多行以提高可读性,则有两种选择:
在后面紧接换行符|
,这告诉PowerShell命令在下一行继续:
... |
Out-File -Path C:Filepath
用显式的行连续结尾,这意味着将其放置`
在行的最末端:
... `
| Out-File -Path C:Filepath
另外,由于您使用的Out-File
是默认行为,因此可以使用>
输出重定向来代替:
... > C:Filepath
几个方面:
Out-File
与字符串以外的其他东西一起使用,以及Format-*
通常使用cmdlet,这意味着输出仅适合显示(人类消耗),不适用于进一步的程序处理。
如果你想输出发送到两个控制台和一个文件,使用Tee-Object
小命令,如TobyU建议:
... | Tee-Object -Path C:Filepath
[1]严格来说,-LiteralPath
在这种情况下是最好的选择,因为-Path
它将其参数解释为通配符表达式。但是,省略-Path
(即通常将文件路径指定为位置参数)隐式绑定到-Path
。