我试图弄清楚为什么这些命令不是通过脚本运行的。但是,当我手动运行它时,它正在工作。
$value = Get-Content c:\info.txt | select-string Id | Foreach-Object { $_.ToString().split(':')[1] -replace '\s','' }
Write-Host "$value" >> c:\list.txt
我尝试使用>>重定向但仍然没有信息在变量$ value
中更新Get-Content c:\info.txt | select-string Id | Foreach-Object { $_.ToString().split(':')[1] -replace '\s','' } >> $value
Write-Host "$value" >> c:\list.txt
答案 0 :(得分:0)
要将内容写入您希望使用Set-Content
或Add-Content
的文件。在您的情况下,您会想要使用Add-Content
,因为它会附加而不是像>>
流重新导演那样覆盖数据。在特定情况之外的PowerShell脚本中通常应该避免使用Write-Host
,而不是here。
$value = Get-Content c:\info.txt | select-string Id | Foreach-Object { $_.ToString().split(':')[1] -replace '\s','' }
Add-Content -Path C:\list.txt -Value $value
Write-Host
在脚本中没有产生任何输出的原因是因为它绕过将对象发送到PowerShell对象流引擎而不是直接发送到控制台主机,这取决于您的脚本执行环境可能不是什么你期待。
答案 1 :(得分:0)
您无法重定向Write-Host
。你需要删除它。以下示例将执行您的要求:
Get-Content "C:\info.txt" | select-string Id | Foreach-Object { $_.ToString().Split(':')[1] -replace '\s','' } >> "C:\List.txt"
...虽然我不确定字符串操作的用途,因为我不知道C:\ Info.txt的内容是什么样的。
如果您只想将输出放入$value
而不是重定向到文件,您可以这样写:
$value = Get-Content "C:\info.txt" | select-string Id | Foreach-Object { $_.ToString().Split(':')[1] -replace '\s','' }