我正在编写PowerShell脚本以收集服务器上的常规信息。我编写了脚本,以便通过PowerShells Start-Transcript cmdlet将其输出到名为output.txt的文件。输出正常。但是我只希望输出在文件中,而不显示在控制台上。
我一直在寻找并尝试查看Start-Transcription是否可以抑制控制台输出,但是我什么都没找到。
这是我正在使用的代码的简化版本-
Start-Transcript -path "Path\To\Output\File.txt"
$servers = Get-Content -path "Path\To\Servers\List\file.txt"
foreach ($server in $servers)
{
net view
net use
net session
}
Stop-Transcript
所有这些都正确输出到文件,但是我只希望它不在控制台中显示脚本/命令结果。如果可能的话。
答案 0 :(得分:1)
这项工作可以吗?
$FilePath = 'Path\To\Output\File.txt'
net view | Out-File -FilePath $FilePath
net use | Out-File -FilePath $FilePath -NoClobber -Append
net session | Out-File -FilePath $FilePath -NoClobber -Append
或将其捆绑:
Invoke-Command {net view ; net use ; net session} | Out-File -FilePath $FilePath -NoClobber -Append
根据评论进行编辑(但可以在iPhone上从内存中自由写入,因此可能有一些小错误): 要针对服务器列表进行远程运行,您首先要在服务器上启用Powershell远程处理,这有很多方法,以下是在每台服务器上的本地Powershell会话中运行的一种方法(Runas Admin):
winrm quickconfig
然后,假设它们都具有相同的登录名,则可以:
$Cred = Get-Credential
$Servers = ’server1.example.com’,’server2.example.com’
Invoke-Command -ComputerNames $Servers -Credential $Cred -ScriptBlock {
Do stuff
Do some other stuff
} | Out-File -FilePath $FilePath -NoClobber -Append
结果以数组形式返回,因此,如果要按服务器分隔输出,可以尝试:
$a = Invoke-Command [...]etc but skip the |Out-File
然后执行一些循环,该循环实质上完成了这一部分,在此处为您提供了手动方式:
$a[0] | Out-File -FilePath $FilePath1 -NoClobber -Append #result from first computer
$a[1] | Out-File -FilePath $FilePath2 -NoClobber -Append #result from second computer
...
和示例循环:
$a | Foreach-Object {$_ | Out-File -FilePath $Path -Append -NoClobber}
要从文本文件中读取服务器名称,每行一个服务器名称:
$Servers = Get-Content -Path ’C:\temp\example.txt’
Invoke-Command -ComputerName $Servers [...]etc